Bug 1512745 - Allow leading and trailing spaces for pairs as well r=longsonr
☠☠ backed out by c045dd97faf2 ☠ ☠
authorviolet <violet.bugreport@gmail.com>
Thu, 28 Mar 2019 06:12:04 +0000
changeset 466517 062344ad3eea0d383fc7e938577a8b0831c5a935
parent 466516 772847bbb31406441f209732aa8b77a4b6b48ed9
child 466518 c045dd97faf291904e060d8889391497d92b8353
push id35768
push useropoprus@mozilla.com
push dateThu, 28 Mar 2019 09:55:54 +0000
treeherdermozilla-central@c045dd97faf2 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerslongsonr
bugs1512745
milestone68.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1512745 - Allow leading and trailing spaces for pairs as well r=longsonr We also allow leading and trailing spaces for pair to be consistent with length, number, etc. Differential Revision: https://phabricator.services.mozilla.com/D25050
dom/svg/SVGIntegerPair.cpp
dom/svg/SVGNumberPair.cpp
dom/svg/test/mochitest.ini
dom/svg/test/test_pairParsing.html
--- a/dom/svg/SVGIntegerPair.cpp
+++ b/dom/svg/SVGIntegerPair.cpp
@@ -24,34 +24,29 @@ static SVGAttrTearoffTable<SVGIntegerPai
     sSVGSecondAnimatedIntegerTearoffTable;
 
 /* Implementation */
 
 static nsresult ParseIntegerOptionalInteger(const nsAString& aValue,
                                             int32_t aValues[2]) {
   nsCharSeparatedTokenizerTemplate<nsContentUtils::IsHTMLWhitespace> tokenizer(
       aValue, ',', nsCharSeparatedTokenizer::SEPARATOR_OPTIONAL);
-  if (tokenizer.whitespaceBeforeFirstToken()) {
-    return NS_ERROR_DOM_SYNTAX_ERR;
-  }
-
   uint32_t i;
   for (i = 0; i < 2 && tokenizer.hasMoreTokens(); ++i) {
     if (!SVGContentUtils::ParseInteger(tokenizer.nextToken(), aValues[i])) {
       return NS_ERROR_DOM_SYNTAX_ERR;
     }
   }
   if (i == 1) {
     aValues[1] = aValues[0];
   }
 
-  if (i == 0 ||                                   // Too few values.
-      tokenizer.hasMoreTokens() ||                // Too many values.
-      tokenizer.whitespaceAfterCurrentToken() ||  // Trailing whitespace.
-      tokenizer.separatorAfterCurrentToken()) {   // Trailing comma.
+  if (i == 0 ||                                  // Too few values.
+      tokenizer.hasMoreTokens() ||               // Too many values.
+      tokenizer.separatorAfterCurrentToken()) {  // Trailing comma.
     return NS_ERROR_DOM_SYNTAX_ERR;
   }
 
   return NS_OK;
 }
 
 nsresult SVGIntegerPair::SetBaseValueString(const nsAString& aValueAsString,
                                             SVGElement* aSVGElement) {
--- a/dom/svg/SVGNumberPair.cpp
+++ b/dom/svg/SVGNumberPair.cpp
@@ -20,34 +20,29 @@ static SVGAttrTearoffTable<SVGNumberPair
     sSVGFirstAnimatedNumberTearoffTable;
 static SVGAttrTearoffTable<SVGNumberPair, SVGNumberPair::DOMAnimatedNumber>
     sSVGSecondAnimatedNumberTearoffTable;
 
 static nsresult ParseNumberOptionalNumber(const nsAString& aValue,
                                           float aValues[2]) {
   nsCharSeparatedTokenizerTemplate<nsContentUtils::IsHTMLWhitespace> tokenizer(
       aValue, ',', nsCharSeparatedTokenizer::SEPARATOR_OPTIONAL);
-  if (tokenizer.whitespaceBeforeFirstToken()) {
-    return NS_ERROR_DOM_SYNTAX_ERR;
-  }
-
   uint32_t i;
   for (i = 0; i < 2 && tokenizer.hasMoreTokens(); ++i) {
     if (!SVGContentUtils::ParseNumber(tokenizer.nextToken(), aValues[i])) {
       return NS_ERROR_DOM_SYNTAX_ERR;
     }
   }
   if (i == 1) {
     aValues[1] = aValues[0];
   }
 
-  if (i == 0 ||                                   // Too few values.
-      tokenizer.hasMoreTokens() ||                // Too many values.
-      tokenizer.whitespaceAfterCurrentToken() ||  // Trailing whitespace.
-      tokenizer.separatorAfterCurrentToken()) {   // Trailing comma.
+  if (i == 0 ||                                  // Too few values.
+      tokenizer.hasMoreTokens() ||               // Too many values.
+      tokenizer.separatorAfterCurrentToken()) {  // Trailing comma.
     return NS_ERROR_DOM_SYNTAX_ERR;
   }
 
   return NS_OK;
 }
 
 nsresult SVGNumberPair::SetBaseValueString(const nsAString& aValueAsString,
                                            SVGElement* aSVGElement) {
--- a/dom/svg/test/mochitest.ini
+++ b/dom/svg/test/mochitest.ini
@@ -51,16 +51,17 @@ support-files =
 skip-if = true # disabled-for-intermittent-failures--bug-701060
 [test_length.xhtml]
 [test_lengthParsing.html]
 [test_markerOrient.xhtml]
 [test_nonAnimStrings.xhtml]
 [test_non-scaling-stroke.html]
 [test_object-delayed-intrinsic-size.html]
 [test_onerror.xhtml]
+[test_pairParsing.html]
 [test_pathAnimInterpolation.xhtml]
 skip-if = true # We need to polyfill the SVG DOM for path data
 [test_pointAtLength.xhtml]
 [test_pointer-events-1a.xhtml]
 [test_pointer-events-1b.xhtml]
 [test_pointer-events-2.xhtml]
 [test_pointer-events-3.xhtml]
 skip-if = android_version == '18' # bug 1147994
new file mode 100644
--- /dev/null
+++ b/dom/svg/test/test_pairParsing.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1512745
+-->
+<head>
+  <meta charset="utf-8">
+  <title>Test pair parsing</title>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1512745">Mozilla Bug 1512745</a>
+
+<svg width="230" height="120"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+
+  <filter><feGaussianBlur id="x1" stdDeviation=" 5 " /></filter>
+  <filter><feGaussianBlur id="x2" stdDeviation=" 5 10 " /></filter>
+  <filter><feGaussianBlur id="x3" stdDeviation="5 10 " /></filter>
+  <filter><feGaussianBlur id="x4" stdDeviation=" 5,10 " /></filter>
+</svg>
+
+<pre id="test">
+<script class="testbody" type="text/javascript">
+  function checkValue(id, x, y) {
+    if (y === undefined) {
+      y = x;
+    }
+    e = document.getElementById(id);
+    is(e.stdDeviationX.baseVal, x, "Wrong stdDeviationX");
+    is(e.stdDeviationY.baseVal, y, "Wrong stdDeviationY");
+  }
+
+  checkValue("x1", 5);
+  checkValue("x2", 5, 10);
+  checkValue("x3", 5, 10);
+  checkValue("x4", 5, 10);
+</script>
+</pre>
+</body>
+</html>