From 07bd46277e06794c24940f937d8fd0206e0b71ae Mon Sep 17 00:00:00 2001 From: Yves Lafon Date: Sat, 27 Jul 2019 15:26:51 +0200 Subject: [PATCH 1/2] check that input is not an email, if so, bail out with an informative error --- build.xml | 3 + org/w3c/css/servlet/CssValidator.java | 136 ++++++++++++++++-------- org/w3c/css/util/Messages.properties.en | 2 + org/w3c/css/util/Messages.properties.fr | 2 + 4 files changed, 96 insertions(+), 47 deletions(-) diff --git a/build.xml b/build.xml index 203f5fb27..71c13139f 100644 --- a/build.xml +++ b/build.xml @@ -38,6 +38,7 @@ + @@ -61,6 +62,7 @@ + @@ -78,6 +80,7 @@ + diff --git a/org/w3c/css/servlet/CssValidator.java b/org/w3c/css/servlet/CssValidator.java index ee4491858..5252f85f2 100644 --- a/org/w3c/css/servlet/CssValidator.java +++ b/org/w3c/css/servlet/CssValidator.java @@ -7,6 +7,7 @@ package org.w3c.css.servlet; +import org.apache.commons.validator.routines.EmailValidator; import org.w3c.css.css.CssParser; import org.w3c.css.css.DocumentParser; import org.w3c.css.css.StyleReport; @@ -17,11 +18,14 @@ import org.w3c.css.error.ErrorReport; import org.w3c.css.error.ErrorReportFactory; import org.w3c.css.index.IndexGenerator; +import org.w3c.css.parser.CssError; +import org.w3c.css.parser.Errors; import org.w3c.css.util.ApplContext; import org.w3c.css.util.Codecs; import org.w3c.css.util.CssVersion; import org.w3c.css.util.FakeFile; import org.w3c.css.util.HTTPURL; +import org.w3c.css.util.InvalidParamException; import org.w3c.css.util.NVPair; import org.w3c.css.util.Utf8Properties; import org.w3c.css.util.Util; @@ -367,65 +371,76 @@ public void doGet(HttpServletRequest req, HttpServletResponse res) // " (" + req.getRemoteAddr() + ") at " + (new Date()) ); if (uri != null) { - // HTML document - try { - uri = HTTPURL.getURL(uri).toString(); // needed to be sure - // that it is a valid - // url - uri = uri.replaceAll(" ", "%20"); - if (Util.checkURI(uri)) { - DocumentParser URLparser = new DocumentParser(ac, uri); - handleRequest(ac, res, uri, URLparser.getStyleSheet(), output, - warningLevel, errorReport); - } else { - res.setHeader("Rejected", "Requested URI Forbidden by Rule"); - handleError(res, ac, output, "Forbidden", new IOException( - "URI Forbidden by rule"), false); - } - } catch (ProtocolException pex) { - if (Util.onDebug) { - pex.printStackTrace(); + // check for scammers + EmailValidator ev = EmailValidator.getInstance(); + if (ev.isValid(uri)) { + handleScam(ac, uri, res, output, warningLevel, errorReport); + } else { + // HTML document + try { + uri = HTTPURL.getURL(uri).toString(); // needed to be sure + // that it is a valid + // url + uri = uri.replaceAll(" ", "%20"); + if (Util.checkURI(uri)) { + DocumentParser URLparser = new DocumentParser(ac, uri); + handleRequest(ac, res, uri, URLparser.getStyleSheet(), output, + warningLevel, errorReport); + } else { + res.setHeader("Rejected", "Requested URI Forbidden by Rule"); + handleError(res, ac, output, "Forbidden", new IOException( + "URI Forbidden by rule"), false); + } + } catch (ProtocolException pex) { + if (Util.onDebug) { + pex.printStackTrace(); + } + res.setHeader("WWW-Authenticate", pex.getMessage()); + res.sendError(HttpServletResponse.SC_UNAUTHORIZED); + } catch (Exception e) { + handleError(res, ac, output, uri, e, true); } - res.setHeader("WWW-Authenticate", pex.getMessage()); - res.sendError(HttpServletResponse.SC_UNAUTHORIZED); - } catch (Exception e) { - handleError(res, ac, output, uri, e, true); } } else if (text != null) { String fileName = "TextArea"; Util.verbose("- " + fileName + " Data -"); Util.verbose(text); Util.verbose("- End of " + fileName + " Data"); - InputStream is = new ByteArrayInputStream(text.getBytes()); - fileName = "file://localhost/" + fileName; + EmailValidator ev = EmailValidator.getInstance(); + if (ev.isValid(text)) { + handleScam(ac, text, res, output, warningLevel, errorReport); + } else { + InputStream is = new ByteArrayInputStream(text.getBytes()); + fileName = "file://localhost/" + fileName; - try { + try { - if ("css".equals(type) || ("none".equals(type) && isCSS(text))) { - // if CSS: - parser = new StyleSheetParser(); - parser.parseStyleElement(ac, is, null, usermedium, - new URL(fileName), 0); + if ("css".equals(type) || ("none".equals(type) && isCSS(text))) { + // if CSS: + parser = new StyleSheetParser(); + parser.parseStyleElement(ac, is, null, usermedium, + new URL(fileName), 0); - handleRequest(ac, res, fileName, parser - .getStyleSheet(), output, warningLevel, errorReport); - } else { - // else, trying HTML + handleRequest(ac, res, fileName, parser.getStyleSheet(), + output, warningLevel, errorReport); + } else { + // else, trying HTML // HTMLParserStyleSheetHandler handler = new HTMLParserStyleSheetHandler(null, ac); - TagSoupStyleSheetHandler handler = new TagSoupStyleSheetHandler(null, ac); - handler.parse(is, fileName); - - handleRequest(ac, res, fileName, handler.getStyleSheet(), output, - warningLevel, errorReport); - } - } catch (ProtocolException pex) { - if (Util.onDebug) { - pex.printStackTrace(); + TagSoupStyleSheetHandler handler = new TagSoupStyleSheetHandler(null, ac); + handler.parse(is, fileName); + + handleRequest(ac, res, fileName, handler.getStyleSheet(), output, + warningLevel, errorReport); + } + } catch (ProtocolException pex) { + if (Util.onDebug) { + pex.printStackTrace(); + } + res.setHeader("WWW-Authenticate", pex.getMessage()); + res.sendError(HttpServletResponse.SC_UNAUTHORIZED); + } catch (Exception e) { + handleError(res, ac, output, fileName, e, false); } - res.setHeader("WWW-Authenticate", pex.getMessage()); - res.sendError(HttpServletResponse.SC_UNAUTHORIZED); - } catch (Exception e) { - handleError(res, ac, output, fileName, e, false); } } Util.verbose("CssValidator: Request terminated.\n"); @@ -667,6 +682,12 @@ public void doPost(HttpServletRequest req, HttpServletResponse res) fileName = file.getName(); Util.verbose("File : " + fileName); } else { + // check POSTED text for possible scam + EmailValidator ev = EmailValidator.getInstance(); + if (ev.isValid(text)) { + handleScam(ac, text, res, output, warningLevel, errorReport); + return; + } ac.setFakeText(text); fileName = "TextArea"; Util.verbose("- " + fileName + " Data -"); @@ -724,6 +745,27 @@ public void doPost(HttpServletRequest req, HttpServletResponse res) Util.verbose("CssValidator: Request terminated.\n"); } + private void handleScam(ApplContext ac, String uri, HttpServletResponse res, String output, + int warningLevel, boolean errorReport) + throws IOException { + // so it is an email and not a URL, do something clever. + String fileName = "email"; + InputStream is = new ByteArrayInputStream("".getBytes()); + fileName = "file://" + fileName; + try { + TagSoupStyleSheetHandler handler = new TagSoupStyleSheetHandler(null, ac); + handler.parse(is, fileName); + // add a warning + Errors e = new Errors(); + e.addError(new CssError(new InvalidParamException("email", uri, ac))); + handler.getStyleSheet().addErrors(e); + handleRequest(ac, res, fileName, handler.getStyleSheet(), output, + warningLevel, errorReport); + } catch (Exception e) { + handleError(res, ac, output, fileName, e, false); + } + } + private void handleRequest(ApplContext ac, HttpServletResponse res, String title, StyleSheet styleSheet, String output, int warningLevel, diff --git a/org/w3c/css/util/Messages.properties.en b/org/w3c/css/util/Messages.properties.en index 4b59a66da..6251efebc 100644 --- a/org/w3c/css/util/Messages.properties.en +++ b/org/w3c/css/util/Messages.properties.en @@ -444,3 +444,5 @@ error.invalidtype: Invalid type: \u201C%s\u201D error.typevaluemismatch: The value \u201C%s\u201D is incompatible with its type definition <\u201C%s\u201D> error.emptymedia: In CSS2, the media type in @media is mandatory + +error.email: email addresses cannot be validated by this tool, you might be scammed diff --git a/org/w3c/css/util/Messages.properties.fr b/org/w3c/css/util/Messages.properties.fr index d57342dec..b86ba1c35 100644 --- a/org/w3c/css/util/Messages.properties.fr +++ b/org/w3c/css/util/Messages.properties.fr @@ -465,3 +465,5 @@ error.invalidtype: Type invalide: \u201C%s\u201D error.typevaluemismatch: La valeur \u201C%s\u201D est incompatible avec sa définition de type <\u201C%s\u201D> error.emptymedia: En CSS2, l'indication du type de media dans la règle @media est ogligatoire + +error.email: Les adresses email ne peuvent être validées par cet outil, il est possible que vous soyez victime d'une escroquerie From 37ff62d48457833a2cf895bd612882dda1aa0057 Mon Sep 17 00:00:00 2001 From: Yves Lafon Date: Sat, 27 Jul 2019 15:27:37 +0200 Subject: [PATCH 2/2] regen translation table --- translations.html | 96 ++++++++++++++++++++++++++++------------------- 1 file changed, 58 insertions(+), 38 deletions(-) diff --git a/translations.html b/translations.html index a834dac9e..23302304a 100644 --- a/translations.html +++ b/translations.html @@ -52,11 +52,11 @@

Help complete the translation of the validator in your language

Italiano
82% Nederlands
82% 日本語
82% - Polski
93% + Polski
92% Português
96% Русский
86% فارسی
80% - Svenska
100% + Svenska
99% Български
85% Українська
83% Čeština
83% @@ -1068,6 +1068,26 @@

Help complete the translation of the validator in your language

+error.email

email addresses cannot be validated by this tool, you might be scammed

+ + + + + + + + + + + + + + + + + + + error.emptymedia

In CSS2, the media type in @media is mandatory

@@ -1248,7 +1268,7 @@

Help complete the translation of the validator in your language

-error.groupname

“%s” is not a correct groupname. Use a valid identifier

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.groupname

“%s” is not a correct groupname. Use a valid identifier

@@ -1268,7 +1288,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.id

ID selector #%s is invalid ! Only one ID selector can be specified in a simple selector: %s.

+error.id

ID selector #%s is invalid ! Only one ID selector can be specified in a simple selector: %s.

@@ -1488,7 +1508,7 @@

Help complete the translation of the validator in your language

-error.negative-value

“%s” negative values are not allowed

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.negative-value

“%s” negative values are not allowed

@@ -1508,7 +1528,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.noatruleyet

Other @rules than @import are not supported by CSS1 “%s”

+error.noatruleyet

Other @rules than @import are not supported by CSS1 “%s”

@@ -1728,7 +1748,7 @@

Help complete the translation of the validator in your language

-error.notforatsc

“%s” can not be used with ATSC profile

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.notforatsc

“%s” can not be used with ATSC profile

@@ -1748,7 +1768,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.notforcss1

Value “%s” does not exist for CSS1

+error.notforcss1

Value “%s” does not exist for CSS1

@@ -1968,7 +1988,7 @@

Help complete the translation of the validator in your language

-error.pseudo-class

The pseudo-class .“%s” can't appear here in the HTML context “%s”

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.pseudo-class

The pseudo-class .“%s” can't appear here in the HTML context “%s”

@@ -1988,7 +2008,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.pseudo-element

The pseudo-element “%s” can't appear here in the context “%s”

+error.pseudo-element

The pseudo-element “%s” can't appear here in the context “%s”

@@ -2208,7 +2228,7 @@

Help complete the translation of the validator in your language

-error.system-font-keyword-not-sole-value

No other property values should be used with “%s”. It should be the sole value; e.g., “p { font: %s; }”

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.system-font-keyword-not-sole-value

No other property values should be used with “%s”. It should be the sole value; e.g., “p { font: %s; }”

@@ -2228,7 +2248,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文error.todo

Sorry the feature “%s” is not implemented yet.

+error.todo

Sorry the feature “%s” is not implemented yet.

@@ -2448,7 +2468,7 @@

Help complete the translation of the validator in your language

-errors_sorry_msg

Sorry! We found the following errors

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文errors_sorry_msg

Sorry! We found the following errors

@@ -2468,7 +2488,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文feedback

Feedback

+feedback

Feedback

@@ -2688,7 +2708,7 @@

Help complete the translation of the validator in your language

-generator.unrecognize

Parse Error

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文generator.unrecognize

Parse Error

@@ -2708,7 +2728,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文generator.unrecognized

Unrecognized

+generator.unrecognized

Unrecognized

@@ -2928,7 +2948,7 @@

Help complete the translation of the validator in your language

-more_options

More Options

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文more_options

More Options

@@ -2948,7 +2968,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文most_important

Most important

+most_important

Most important

@@ -3168,7 +3188,7 @@

Help complete the translation of the validator in your language

-not-css1-style

/* BE CAREFUL ! This is not a CSS1 property ! */

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文not-css1-style

/* BE CAREFUL ! This is not a CSS1 property ! */

@@ -3188,7 +3208,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文note

Note

+note

Note

@@ -3408,7 +3428,7 @@

Help complete the translation of the validator in your language

-parser.id_dim

In CSS1, an id name can start with a digit ("#55ft"), unless it is a dimension ("#55in").

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文parser.id_dim

In CSS1, an id name can start with a digit ("#55ft"), unless it is a dimension ("#55in").

@@ -3428,7 +3448,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文parser.import_not_allowed

@import are not allowed after any valid statement other than @charset and @import.

+parser.import_not_allowed

@import are not allowed after any valid statement other than @charset and @import.

@@ -3648,7 +3668,7 @@

Help complete the translation of the validator in your language

-servlet.invalid-request

You have sent an invalid request.

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文servlet.invalid-request

You have sent an invalid request.

@@ -3668,7 +3688,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文servlet.process

Can't process the object

+servlet.process

Can't process the object

@@ -3888,7 +3908,7 @@

Help complete the translation of the validator in your language

-tty

TTY

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文tty

TTY

@@ -3908,7 +3928,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文tv

TV

+tv

TV

@@ -4128,7 +4148,7 @@

Help complete the translation of the validator in your language

-vext_errors

Errors

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文vext_errors

Errors

@@ -4148,7 +4168,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文vext_warnings

Warnings

+vext_warnings

Warnings

@@ -4368,7 +4388,7 @@

Help complete the translation of the validator in your language

-warning.deprecatedmedia

The media “%s” has been deprecated

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.deprecatedmedia

The media “%s” has been deprecated

@@ -4388,7 +4408,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.deprecatedproperty

The property “%s” is deprecated

+warning.deprecatedproperty

The property “%s” is deprecated

@@ -4608,7 +4628,7 @@

Help complete the translation of the validator in your language

-warning.negative

negative value “%s” will be interpreted as “0”

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.negative

negative value “%s” will be interpreted as “0”

@@ -4628,7 +4648,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.no-background-color

You have no background-color set (or background-color is set to transparent) but you have set a color. Make sure that cascading of colors keeps the text reasonably legible.

+warning.no-background-color

You have no background-color set (or background-color is set to transparent) but you have set a color. Make sure that cascading of colors keeps the text reasonably legible.

@@ -4848,7 +4868,7 @@

Help complete the translation of the validator in your language

-warning.notforusermedium

Property “%s” doesn't exist for this usermedium

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.notforusermedium

Property “%s” doesn't exist for this usermedium

@@ -4868,7 +4888,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.notversion

“%s” can not be used with this version of CSS : “%s”

+warning.notversion

“%s” can not be used with this version of CSS : “%s”

@@ -5088,7 +5108,7 @@

Help complete the translation of the validator in your language

-warning.same-colors2

Same colors for color and background-color in two contexts “%s” and “%s”

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.same-colors2

Same colors for color and background-color in two contexts “%s” and “%s”

@@ -5108,7 +5128,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.shape-separator

Invalid separator in shape definition. It must be a comma.

+warning.shape-separator

Invalid separator in shape definition. It must be a comma.

@@ -5328,7 +5348,7 @@

Help complete the translation of the validator in your language

-warning.xsl

value “%s” only applies to XSL

+PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.xsl

value “%s” only applies to XSL

@@ -5348,7 +5368,7 @@

Help complete the translation of the validator in your language

-PropertyDeutschEspañolFrançais한국어ItalianoNederlands日本語PolskiPortuguêsРусскийفارسیSvenskaБългарскиУкраїнськаČeštinaRomanianMagyarΕλληνικάहिन्दी简体中文warning.zero

only “0” can be a “%s”. You must put a unit after your number

+warning.zero

only “0” can be a “%s”. You must put a unit after your number