RESOLVED FIXED 85119
Only allow non-null pointers in the WeakSet
https://bugs.webkit.org/show_bug.cgi?id=85119
Summary Only allow non-null pointers in the WeakSet
Geoffrey Garen
Reported 2012-04-27 19:22:10 PDT
Only allow non-null pointers in the WeakSet
Attachments
Patch (8.62 KB, patch)
2012-04-27 19:35 PDT, Geoffrey Garen
darin: review+
Geoffrey Garen
Comment 1 2012-04-27 19:35:21 PDT
Darin Adler
Comment 2 2012-04-27 19:47:15 PDT
Comment on attachment 139326 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=139326&action=review > Source/JavaScriptCore/heap/PassWeak.h:127 > template<typename T> inline PassWeak<T>::PassWeak(JSGlobalData& globalData, typename PassWeak<T>::GetType getType, WeakHandleOwner* weakOwner, void* context) > - : m_impl(globalData.heap.weakSet()->allocate(getType, weakOwner, context)) > + : m_impl(0) > { > + if (!getType) > + return; > + m_impl = globalData.heap.weakSet()->allocate(getType, weakOwner, context); > } As with your prior WebCore patch, I think there are two other ways you could do this: 1) A helper function that returns 0 if getType is 0. 2) A trinary expression getType ? xxx : 0. The “initialize to 0 and then use an early exit” doesn’t seem quite as good as those. > Source/JavaScriptCore/heap/WeakBlock.cpp:109 > const JSValue& jsValue = weakImpl->jsValue(); > - if (!jsValue || !jsValue.isCell()) > - continue; > - > JSCell* jsCell = jsValue.asCell(); > if (Heap::isMarked(jsCell)) > continue; Why bother with all these local variables? I like this: if (Heap::isMarked(weakImpl->jsValue().asCell())) > Source/JavaScriptCore/heap/WeakBlock.cpp:136 > const JSValue& jsValue = weakImpl->jsValue(); > - if (!jsValue || !jsValue.isCell()) > - continue; > - > JSCell* jsCell = jsValue.asCell(); > if (Heap::isMarked(jsCell)) > continue; Why bother with all these local variables? I like this: if (Heap::isMarked(weakImpl->jsValue().asCell()))
Geoffrey Garen
Comment 3 2012-04-27 20:41:38 PDT
> As with your prior WebCore patch, I think there are two other ways you could do this: > > 1) A helper function that returns 0 if getType is 0. > 2) A trinary expression getType ? xxx : 0. OK, I did 2. > Why bother with all these local variables? I like this: I kept jsValue in one function, since it's reused later, but removed all the other locals.
Geoffrey Garen
Comment 4 2012-04-27 20:42:34 PDT
Note You need to log in before you can comment on or make changes to this bug.