diff --git a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp index 6d25d50daf2..d1ce83b139f 100644 --- a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp @@ -3663,16 +3663,19 @@ static PRBool SelectorMatches(RuleProcessorData &data, } else { result = localTrue; nsAttrSelector* attr = aSelector->mAttrList; - nsAutoString value; do { - nsresult attrState = data.mContent->GetAttr(attr->mNameSpace, attr->mAttr, value); - if (NS_FAILED(attrState) || (NS_CONTENT_ATTR_NOT_THERE == attrState)) { + if (!data.mContent->HasAttr(attr->mNameSpace, attr->mAttr)) { result = localFalse; } - else { + else if (attr->mFunction != NS_ATTR_FUNC_SET) { + nsAutoString value; + nsresult attrState = + data.mContent->GetAttr(attr->mNameSpace, attr->mAttr, value); + NS_ASSERTION(NS_SUCCEEDED(attrState) && + NS_CONTENT_ATTR_NOT_THERE != attrState, + "HasAttr lied or GetAttr failed"); PRBool isCaseSensitive = attr->mCaseSensitive; switch (attr->mFunction) { - case NS_ATTR_FUNC_SET: break; case NS_ATTR_FUNC_EQUALS: if (isCaseSensitive) { result = PRBool(localTrue == value.Equals(attr->mValue)); diff --git a/mozilla/layout/style/nsCSSStyleSheet.cpp b/mozilla/layout/style/nsCSSStyleSheet.cpp index 6d25d50daf2..d1ce83b139f 100644 --- a/mozilla/layout/style/nsCSSStyleSheet.cpp +++ b/mozilla/layout/style/nsCSSStyleSheet.cpp @@ -3663,16 +3663,19 @@ static PRBool SelectorMatches(RuleProcessorData &data, } else { result = localTrue; nsAttrSelector* attr = aSelector->mAttrList; - nsAutoString value; do { - nsresult attrState = data.mContent->GetAttr(attr->mNameSpace, attr->mAttr, value); - if (NS_FAILED(attrState) || (NS_CONTENT_ATTR_NOT_THERE == attrState)) { + if (!data.mContent->HasAttr(attr->mNameSpace, attr->mAttr)) { result = localFalse; } - else { + else if (attr->mFunction != NS_ATTR_FUNC_SET) { + nsAutoString value; + nsresult attrState = + data.mContent->GetAttr(attr->mNameSpace, attr->mAttr, value); + NS_ASSERTION(NS_SUCCEEDED(attrState) && + NS_CONTENT_ATTR_NOT_THERE != attrState, + "HasAttr lied or GetAttr failed"); PRBool isCaseSensitive = attr->mCaseSensitive; switch (attr->mFunction) { - case NS_ATTR_FUNC_SET: break; case NS_ATTR_FUNC_EQUALS: if (isCaseSensitive) { result = PRBool(localTrue == value.Equals(attr->mValue));