From a01b70cd436edf80c98b8ea2fc9134a8115f5d41 Mon Sep 17 00:00:00 2001 From: Robert Longson Date: Wed, 20 Jan 2010 19:58:58 +0000 Subject: [PATCH] Bug 539697 - valueAsString returns an incorrect failure code. r=jwatt --- content/svg/content/src/nsSVGAngle.cpp | 22 ++++--- content/svg/content/src/nsSVGBoolean.cpp | 2 +- content/svg/content/src/nsSVGEnum.cpp | 4 +- content/svg/content/src/nsSVGInteger.cpp | 4 +- content/svg/content/src/nsSVGLength.cpp | 8 +-- content/svg/content/src/nsSVGLength2.cpp | 17 +++-- content/svg/content/src/nsSVGLengthList.cpp | 2 +- .../svg/content/src/nsSVGMarkerElement.cpp | 2 +- content/svg/content/src/nsSVGNumber.cpp | 6 +- content/svg/content/src/nsSVGNumber2.cpp | 4 +- content/svg/content/src/nsSVGNumberList.cpp | 2 +- content/svg/content/src/nsSVGPointList.cpp | 6 +- .../content/src/nsSVGPreserveAspectRatio.cpp | 16 +++-- .../svg/content/src/nsSVGTransformList.cpp | 2 +- content/svg/content/src/nsSVGViewBox.cpp | 2 +- content/svg/content/test/Makefile.in | 1 + .../svg/content/test/test_valueAsString.xhtml | 62 +++++++++++++++++++ 17 files changed, 118 insertions(+), 44 deletions(-) create mode 100644 content/svg/content/test/test_valueAsString.xhtml diff --git a/content/svg/content/src/nsSVGAngle.cpp b/content/svg/content/src/nsSVGAngle.cpp index a46028362f6d..dd97e45d8461 100644 --- a/content/svg/content/src/nsSVGAngle.cpp +++ b/content/svg/content/src/nsSVGAngle.cpp @@ -76,13 +76,11 @@ public: NS_IMETHOD NewValueSpecifiedUnits(PRUint16 unitType, float valueInSpecifiedUnits) { - NS_ENSURE_FINITE(valueInSpecifiedUnits, NS_ERROR_ILLEGAL_VALUE); - mVal.NewValueSpecifiedUnits(unitType, valueInSpecifiedUnits, nsnull); - return NS_OK; + return mVal.NewValueSpecifiedUnits(unitType, valueInSpecifiedUnits, nsnull); } NS_IMETHOD ConvertToSpecifiedUnits(PRUint16 unitType) - { mVal.ConvertToSpecifiedUnits(unitType, nsnull); return NS_OK; } + { return mVal.ConvertToSpecifiedUnits(unitType, nsnull); } private: nsSVGAngle mVal; @@ -205,7 +203,7 @@ GetValueFromString(const nsAString &aValueAsString, const char *str = value.get(); if (NS_IsAsciiWhitespace(*str)) - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; char *rest; *aValue = float(PR_strtod(str, &rest)); @@ -216,7 +214,7 @@ GetValueFromString(const nsAString &aValueAsString, } } - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } float @@ -244,31 +242,35 @@ nsSVGAngle::SetBaseValueInSpecifiedUnits(float aValue, aSVGElement->DidChangeAngle(mAttrEnum, PR_TRUE); } -void +nsresult nsSVGAngle::ConvertToSpecifiedUnits(PRUint16 unitType, nsSVGElement *aSVGElement) { if (!IsValidUnitType(unitType)) - return; + return NS_ERROR_DOM_NOT_SUPPORTED_ERR; float valueInUserUnits = mBaseVal / GetUnitScaleFactor(); mSpecifiedUnitType = PRUint8(unitType); SetBaseValue(valueInUserUnits, aSVGElement); + return NS_OK; } -void +nsresult nsSVGAngle::NewValueSpecifiedUnits(PRUint16 unitType, float valueInSpecifiedUnits, nsSVGElement *aSVGElement) { + NS_ENSURE_FINITE(valueInSpecifiedUnits, NS_ERROR_ILLEGAL_VALUE); + if (!IsValidUnitType(unitType)) - return; + return NS_ERROR_DOM_NOT_SUPPORTED_ERR; mBaseVal = mAnimVal = valueInSpecifiedUnits; mSpecifiedUnitType = PRUint8(unitType); if (aSVGElement) { aSVGElement->DidChangeAngle(mAttrEnum, PR_TRUE); } + return NS_OK; } nsresult diff --git a/content/svg/content/src/nsSVGBoolean.cpp b/content/svg/content/src/nsSVGBoolean.cpp index 402e696f0d13..0b576242a42b 100644 --- a/content/svg/content/src/nsSVGBoolean.cpp +++ b/content/svg/content/src/nsSVGBoolean.cpp @@ -61,7 +61,7 @@ nsSVGBoolean::SetBaseValueString(const nsAString &aValueAsString, else if (aValueAsString.EqualsLiteral("false")) val = PR_FALSE; else - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; mBaseVal = mAnimVal = val; return NS_OK; diff --git a/content/svg/content/src/nsSVGEnum.cpp b/content/svg/content/src/nsSVGEnum.cpp index 4339a9f148a0..65d1b602a6a3 100644 --- a/content/svg/content/src/nsSVGEnum.cpp +++ b/content/svg/content/src/nsSVGEnum.cpp @@ -79,7 +79,7 @@ nsSVGEnum::SetBaseValueString(const nsAString& aValue, // only a warning since authors may mistype attribute values NS_WARNING("unknown enumeration key"); - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } void @@ -112,7 +112,7 @@ nsSVGEnum::SetBaseValue(PRUint16 aValue, } tmp++; } - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } nsresult diff --git a/content/svg/content/src/nsSVGInteger.cpp b/content/svg/content/src/nsSVGInteger.cpp index b63d1ef53e4a..e324c016a5d8 100644 --- a/content/svg/content/src/nsSVGInteger.cpp +++ b/content/svg/content/src/nsSVGInteger.cpp @@ -59,12 +59,12 @@ nsSVGInteger::SetBaseValueString(const nsAString &aValueAsString, const char *str = value.get(); if (NS_IsAsciiWhitespace(*str)) - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; char *rest; PRInt32 val = strtol(str, &rest, 10); if (rest == str || *rest != '\0') { - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } mBaseVal = mAnimVal = val; diff --git a/content/svg/content/src/nsSVGLength.cpp b/content/svg/content/src/nsSVGLength.cpp index 544b5740d7a3..27eec0a9ab6a 100644 --- a/content/svg/content/src/nsSVGLength.cpp +++ b/content/svg/content/src/nsSVGLength.cpp @@ -396,12 +396,12 @@ nsSVGLength::SetValueAsString(const nsAString & aValueAsString) DidModify(); } else { // parse error // not a valid unit type - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; } } else { // parse error // no number - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; } } @@ -417,7 +417,7 @@ nsSVGLength::NewValueSpecifiedUnits(PRUint16 unitType, float valueInSpecifiedUni NS_ENSURE_FINITE(valueInSpecifiedUnits, NS_ERROR_ILLEGAL_VALUE); if (!IsValidUnitType(unitType)) - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_NOT_SUPPORTED_ERR; WillModify(); mValueInSpecifiedUnits = valueInSpecifiedUnits; @@ -432,7 +432,7 @@ NS_IMETHODIMP nsSVGLength::ConvertToSpecifiedUnits(PRUint16 unitType) { if (!IsValidUnitType(unitType)) - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_NOT_SUPPORTED_ERR; WillModify(); float valueInUserUnits; diff --git a/content/svg/content/src/nsSVGLength2.cpp b/content/svg/content/src/nsSVGLength2.cpp index 6cf698d207b2..0ed84bc3d557 100644 --- a/content/svg/content/src/nsSVGLength2.cpp +++ b/content/svg/content/src/nsSVGLength2.cpp @@ -170,7 +170,7 @@ GetValueFromString(const nsAString &aValueAsString, const char *str = value.get(); if (NS_IsAsciiWhitespace(*str)) - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; char *rest; *aValue = float(PR_strtod(str, &rest)); @@ -181,7 +181,7 @@ GetValueFromString(const nsAString &aValueAsString, } } - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } float @@ -340,26 +340,30 @@ nsSVGLength2::SetBaseValueInSpecifiedUnits(float aValue, #endif } -void +nsresult nsSVGLength2::ConvertToSpecifiedUnits(PRUint16 unitType, nsSVGElement *aSVGElement) { if (!IsValidUnitType(unitType)) - return; + return NS_ERROR_DOM_NOT_SUPPORTED_ERR; float valueInUserUnits = mBaseVal / GetUnitScaleFactor(aSVGElement, mSpecifiedUnitType); mSpecifiedUnitType = PRUint8(unitType); SetBaseValue(valueInUserUnits, aSVGElement); + + return NS_OK; } -void +nsresult nsSVGLength2::NewValueSpecifiedUnits(PRUint16 unitType, float valueInSpecifiedUnits, nsSVGElement *aSVGElement) { + NS_ENSURE_FINITE(valueInSpecifiedUnits, NS_ERROR_ILLEGAL_VALUE); + if (!IsValidUnitType(unitType)) - return; + return NS_ERROR_DOM_NOT_SUPPORTED_ERR; mBaseVal = mAnimVal = valueInSpecifiedUnits; mSpecifiedUnitType = PRUint8(unitType); @@ -370,6 +374,7 @@ nsSVGLength2::NewValueSpecifiedUnits(PRUint16 unitType, aSVGElement->AnimationNeedsResample(); } #endif + return NS_OK; } nsresult diff --git a/content/svg/content/src/nsSVGLengthList.cpp b/content/svg/content/src/nsSVGLengthList.cpp index 3c142153f35c..d51bb5f37c06 100644 --- a/content/svg/content/src/nsSVGLengthList.cpp +++ b/content/svg/content/src/nsSVGLengthList.cpp @@ -151,7 +151,7 @@ nsSVGLengthList::SetValueString(const nsAString& aValue) nsCOMPtr length; NS_NewSVGLength(getter_AddRefs(length), NS_ConvertASCIItoUTF16(token)); if (!length) { - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; break; } AppendElement(length); diff --git a/content/svg/content/src/nsSVGMarkerElement.cpp b/content/svg/content/src/nsSVGMarkerElement.cpp index 609f2c9fe70c..a9a778cdeb01 100644 --- a/content/svg/content/src/nsSVGMarkerElement.cpp +++ b/content/svg/content/src/nsSVGMarkerElement.cpp @@ -114,7 +114,7 @@ nsSVGOrientType::SetBaseValue(PRUint16 aValue, PR_TRUE); return NS_OK; } - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } nsresult diff --git a/content/svg/content/src/nsSVGNumber.cpp b/content/svg/content/src/nsSVGNumber.cpp index 87803cdbb3cb..fbb0abcef88a 100644 --- a/content/svg/content/src/nsSVGNumber.cpp +++ b/content/svg/content/src/nsSVGNumber.cpp @@ -39,6 +39,7 @@ #include "nsSVGNumber.h" #include "nsTextFormatter.h" #include "prdtoa.h" +#include "nsDOMError.h" #include "nsSVGValue.h" #include "nsISVGValueUtils.h" #include "nsContentUtils.h" @@ -139,11 +140,10 @@ nsSVGNumber::SetValueString(const nsAString& aValue) // check to see if there is trailing stuff... if (*rest != '\0') { - rv = NS_ERROR_FAILURE; - NS_ERROR("trailing data in number value"); + rv = NS_ERROR_DOM_SYNTAX_ERR; } } else { - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; // no number } } diff --git a/content/svg/content/src/nsSVGNumber2.cpp b/content/svg/content/src/nsSVGNumber2.cpp index 2dfd739ae6bb..6ae55ca29fb5 100644 --- a/content/svg/content/src/nsSVGNumber2.cpp +++ b/content/svg/content/src/nsSVGNumber2.cpp @@ -93,12 +93,12 @@ nsSVGNumber2::SetBaseValueString(const nsAString &aValueAsString, const char *str = value.get(); if (NS_IsAsciiWhitespace(*str)) - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; char *rest; float val = float(PR_strtod(str, &rest)); if (rest == str || *rest != '\0' || !NS_FloatIsFinite(val)) { - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } mBaseVal = mAnimVal = val; diff --git a/content/svg/content/src/nsSVGNumberList.cpp b/content/svg/content/src/nsSVGNumberList.cpp index d10aaebb2670..7980e55a230a 100644 --- a/content/svg/content/src/nsSVGNumberList.cpp +++ b/content/svg/content/src/nsSVGNumberList.cpp @@ -145,7 +145,7 @@ nsSVGNumberList::SetValueString(const nsAString& aValue) nsCOMPtr number; NS_NewSVGNumber(getter_AddRefs(number), val); if (!number) { - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; break; } AppendElement(number); diff --git a/content/svg/content/src/nsSVGPointList.cpp b/content/svg/content/src/nsSVGPointList.cpp index 1da1cdff0718..44856845fc8b 100644 --- a/content/svg/content/src/nsSVGPointList.cpp +++ b/content/svg/content/src/nsSVGPointList.cpp @@ -177,12 +177,12 @@ nsSVGPointList::SetValueString(const nsAString& aValue) float x = float(PR_strtod(token1, &end)); if (*end != '\0' || !NS_FloatIsFinite(x)) { - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; break; // parse error } float y = float(PR_strtod(token2, &end)); if (*end != '\0' || !NS_FloatIsFinite(y)) { - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; break; // parse error } @@ -197,7 +197,7 @@ nsSVGPointList::SetValueString(const nsAString& aValue) if (token1 || NS_FAILED(rv)) { // there was a parse error or we ran out of memory - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; } else { WillModify(); ReleasePoints(); diff --git a/content/svg/content/src/nsSVGPreserveAspectRatio.cpp b/content/svg/content/src/nsSVGPreserveAspectRatio.cpp index 5e60b36720d5..3a642ab667c2 100644 --- a/content/svg/content/src/nsSVGPreserveAspectRatio.cpp +++ b/content/svg/content/src/nsSVGPreserveAspectRatio.cpp @@ -165,12 +165,12 @@ nsSVGPreserveAspectRatio::SetBaseValueString(const nsAString &aValueAsString, { if (aValueAsString.IsEmpty() || NS_IsAsciiWhitespace(aValueAsString[0])) { - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } nsWhitespaceTokenizer tokenizer(aValueAsString); if (!tokenizer.hasMoreTokens()) { - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } const nsAString &token = tokenizer.nextToken(); @@ -181,24 +181,28 @@ nsSVGPreserveAspectRatio::SetBaseValueString(const nsAString &aValueAsString, if (val.mDefer) { if (!tokenizer.hasMoreTokens()) { - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } rv = val.SetAlign(GetAlignForString(tokenizer.nextToken())); } else { rv = val.SetAlign(GetAlignForString(token)); } - NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + if (NS_FAILED(rv)) { + return NS_ERROR_DOM_SYNTAX_ERR; + } if (tokenizer.hasMoreTokens()) { rv = val.SetMeetOrSlice(GetMeetOrSliceForString(tokenizer.nextToken())); - NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + if (NS_FAILED(rv)) { + return NS_ERROR_DOM_SYNTAX_ERR; + } } else { val.mMeetOrSlice = nsIDOMSVGPreserveAspectRatio::SVG_MEETORSLICE_MEET; } if (tokenizer.hasMoreTokens()) { - return NS_ERROR_FAILURE; + return NS_ERROR_DOM_SYNTAX_ERR; } mAnimVal = mBaseVal = val; diff --git a/content/svg/content/src/nsSVGTransformList.cpp b/content/svg/content/src/nsSVGTransformList.cpp index e58ecfa96448..b4ee555986ea 100644 --- a/content/svg/content/src/nsSVGTransformList.cpp +++ b/content/svg/content/src/nsSVGTransformList.cpp @@ -179,7 +179,7 @@ nsSVGTransformList::SetValueString(const nsAString& aValue) if (NS_FAILED(rv)) { // there was a parse error. - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; } else { WillModify(); diff --git a/content/svg/content/src/nsSVGViewBox.cpp b/content/svg/content/src/nsSVGViewBox.cpp index 4513d27f5734..ada25ef55a03 100644 --- a/content/svg/content/src/nsSVGViewBox.cpp +++ b/content/svg/content/src/nsSVGViewBox.cpp @@ -125,7 +125,7 @@ nsSVGViewBox::SetBaseValueString(const nsAString& aValue, } if (i!=4 || nsCRT::strtok(rest, delimiters, &rest)!=0) { // there was a parse error. - rv = NS_ERROR_FAILURE; + rv = NS_ERROR_DOM_SYNTAX_ERR; } else { SetBaseValue(vals[0], vals[1], vals[2], vals[3], aSVGElement, aDoSetAttr); } diff --git a/content/svg/content/test/Makefile.in b/content/svg/content/test/Makefile.in index 55ad58b177ca..2b39a3f85f38 100644 --- a/content/svg/content/test/Makefile.in +++ b/content/svg/content/test/Makefile.in @@ -68,6 +68,7 @@ _TEST_FILES = \ test_text.html \ text-helper.svg \ test_transform.xhtml \ + test_valueAsString.xhtml \ test_valueLeaks.xhtml \ viewport-helper.svg \ test_viewport.html \ diff --git a/content/svg/content/test/test_valueAsString.xhtml b/content/svg/content/test/test_valueAsString.xhtml new file mode 100644 index 000000000000..0d18d89492e4 --- /dev/null +++ b/content/svg/content/test/test_valueAsString.xhtml @@ -0,0 +1,62 @@ + + + + Test SVGTransform behavior + + + + + +Mozilla Bug 539697 +

+
+ + + + + + +
+
+
+
+ +