[webkit-dev] Eliminate potential null pointer dereference?
John Yani
vanuan at gmail.com
Sat Apr 21 08:13:01 PDT 2012
On 20 April 2012 08:18, Alexey Proskuryakov <ap at webkit.org> wrote:
>
> I noticed a number of patches going in recently that add null checks, or refactor the code under the premise of "eliminating potential null dereference". What does that mean, and why are we allowing such patches to be landed?
>
> For example, this change doesn't look nice: <http://trac.webkit.org/changeset/114678/trunk/Source/WebCore/css/CSSStyleSelector.cpp>.
It means that there might be a situation when selector is null after
first loop finishes:
2310 while (selector) {
2311 // Allow certain common attributes (used in the default
style) in the selectors that match the current element.
2312 if (selector->isAttributeSelector() &&
!isCommonAttributeSelectorAttribute(selector->attribute()))
2313 return true;
2314 if (selectorListContainsUncommonAttributeSelector(selector))
2315 return true;
2316 if (selector->relation() != CSSSelector::SubSelector)
2317 break;
2318 selector = selector->tagHistory();
2319 };
Now selector is null and we are trying to call tagHistory():
2320
2321 for (selector = selector->tagHistory(); selector; selector =
selector->tagHistory()) {
2322 if (selector->isAttributeSelector())
2323 return true;
2324 if (selectorListContainsUncommonAttributeSelector(selector))
2325 return true;
2326 }
Which will result in segfault.
> We should not try to confuse ourselves with unusual for loop forms, and there is no explanation at all of why these changes are needed. No regression tests either.
To construct an obvious test it would be needed to move static inline
function "containsUncommonAttributeSelector" to either
CSSStyleSelector.h or a new file CSSStyleSelectorHelper.h
Then the test would be trivial:
WebCore::CSSSelector selector;
bool doesContain = WebCore::containsUncommonAttributeSelector(&selector);
ASSERT_TRUE(!doesContain);
Without the mentioned patch the above lines would result in a crash.
If your concern is only about missing explanation on why changes
required to add a test are not practical, I totally agree. Otherwise
I'm missing the point.
>
> - WBR, Alexey Proskuryakov
>
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
More information about the webkit-dev
mailing list