| Index: third_party/WebKit/Source/core/svg/SVGAngle.cpp
|
| diff --git a/third_party/WebKit/Source/core/svg/SVGAngle.cpp b/third_party/WebKit/Source/core/svg/SVGAngle.cpp
|
| index 6d94d64a334dab6611bee054899ea8fbac43bd93..b00fd8b2e0644184a379987276a4bed1e14198b4 100644
|
| --- a/third_party/WebKit/Source/core/svg/SVGAngle.cpp
|
| +++ b/third_party/WebKit/Source/core/svg/SVGAngle.cpp
|
| @@ -163,23 +163,24 @@ static SVGAngle::SVGAngleType stringToAngleType(const CharType*& ptr, const Char
|
| return SVGAngle::SVG_ANGLETYPE_UNSPECIFIED;
|
|
|
| SVGAngle::SVGAngleType type = SVGAngle::SVG_ANGLETYPE_UNKNOWN;
|
| - const CharType firstChar = *ptr++;
|
| -
|
| - if (isHTMLSpace<CharType>(firstChar)) {
|
| + if (isHTMLSpace<CharType>(ptr[0])) {
|
| type = SVGAngle::SVG_ANGLETYPE_UNSPECIFIED;
|
| - } else if (end - ptr >= 2) {
|
| - const CharType secondChar = *ptr++;
|
| - const CharType thirdChar = *ptr++;
|
| - if (firstChar == 'd' && secondChar == 'e' && thirdChar == 'g') {
|
| + ptr++;
|
| + } else if (end - ptr >= 3) {
|
| + if (ptr[0] == 'd' && ptr[1] == 'e' && ptr[2] == 'g') {
|
| type = SVGAngle::SVG_ANGLETYPE_DEG;
|
| - } else if (firstChar == 'r' && secondChar == 'a' && thirdChar == 'd') {
|
| + ptr += 3;
|
| + } else if (ptr[0] == 'r' && ptr[1] == 'a' && ptr[2] == 'd') {
|
| type = SVGAngle::SVG_ANGLETYPE_RAD;
|
| - } else if (ptr != end) {
|
| - const CharType fourthChar = *ptr++;
|
| - if (firstChar == 'g' && secondChar == 'r' && thirdChar == 'a' && fourthChar == 'd')
|
| + ptr += 3;
|
| + } else if (end - ptr >= 4) {
|
| + if (ptr[0] == 'g' && ptr[1] == 'r' && ptr[2] == 'a' && ptr[3] == 'd') {
|
| type = SVGAngle::SVG_ANGLETYPE_GRAD;
|
| - else if (firstChar == 't' && secondChar == 'u' && thirdChar == 'r' && fourthChar == 'n')
|
| + ptr += 4;
|
| + } else if (ptr[0] == 't' && ptr[1] == 'u' && ptr[2] == 'r' && ptr[3] == 'n') {
|
| type = SVGAngle::SVG_ANGLETYPE_TURN;
|
| + ptr += 4;
|
| + }
|
| }
|
| }
|
|
|
| @@ -218,19 +219,19 @@ String SVGAngle::valueAsString() const
|
| }
|
|
|
| template<typename CharType>
|
| -static bool parseValue(const String& value, float& valueInSpecifiedUnits, SVGAngle::SVGAngleType& unitType)
|
| +static SVGParsingError parseValue(const String& value, float& valueInSpecifiedUnits, SVGAngle::SVGAngleType& unitType)
|
| {
|
| const CharType* ptr = value.getCharacters<CharType>();
|
| const CharType* end = ptr + value.length();
|
|
|
| if (!parseNumber(ptr, end, valueInSpecifiedUnits, AllowLeadingWhitespace))
|
| - return false;
|
| + return SVGParsingError(SVGParseStatus::ExpectedAngle, ptr - value.getCharacters<CharType>());
|
|
|
| unitType = stringToAngleType(ptr, end);
|
| if (unitType == SVGAngle::SVG_ANGLETYPE_UNKNOWN)
|
| - return false;
|
| + return SVGParsingError(SVGParseStatus::ExpectedAngle, ptr - value.getCharacters<CharType>());
|
|
|
| - return true;
|
| + return SVGParseStatus::NoError;
|
| }
|
|
|
| SVGParsingError SVGAngle::setValueAsString(const String& value)
|
| @@ -254,10 +255,13 @@ SVGParsingError SVGAngle::setValueAsString(const String& value)
|
| float valueInSpecifiedUnits = 0;
|
| SVGAngleType unitType = SVG_ANGLETYPE_UNKNOWN;
|
|
|
| - bool success = value.is8Bit() ? parseValue<LChar>(value, valueInSpecifiedUnits, unitType)
|
| - : parseValue<UChar>(value, valueInSpecifiedUnits, unitType);
|
| - if (!success)
|
| - return SVGParseStatus::ParsingFailed;
|
| + SVGParsingError error;
|
| + if (value.is8Bit())
|
| + error = parseValue<LChar>(value, valueInSpecifiedUnits, unitType);
|
| + else
|
| + error = parseValue<UChar>(value, valueInSpecifiedUnits, unitType);
|
| + if (error != SVGParseStatus::NoError)
|
| + return error;
|
|
|
| m_orientType->setEnumValue(SVGMarkerOrientAngle);
|
| m_unitType = unitType;
|
|
|