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));