You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2021/03/22 14:15:13 UTC
[wicket] branch wicket-8.x updated: WICKET-6815 Incorrect parsing
of html attributes
This is an automated email from the ASF dual-hosted git repository.
mgrigorov pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/wicket-8.x by this push:
new a7d3c95 WICKET-6815 Incorrect parsing of html attributes
a7d3c95 is described below
commit a7d3c954864308d9f65037de7c09df6adc35e30e
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Mon Mar 22 16:12:16 2021 +0200
WICKET-6815 Incorrect parsing of html attributes
Allow '-' in namespaces.
Allow ':' and '@' as start char in attribute names.
(cherry picked from commit 19eee9d1451d17c72319a696241e3db71c91d7ce)
---
.../wicket/util/parse/metapattern/MetaPattern.java | 7 ++-
.../parsers/VariableAssignmentParserTest.java | 50 ++++++++++++++++++++--
2 files changed, 52 insertions(+), 5 deletions(-)
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/parse/metapattern/MetaPattern.java b/wicket-util/src/main/java/org/apache/wicket/util/parse/metapattern/MetaPattern.java
index de61148..7d570b4 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/parse/metapattern/MetaPattern.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/parse/metapattern/MetaPattern.java
@@ -62,8 +62,11 @@ public class MetaPattern implements IClusterable
private static final String _STRING = "(?:[\\w\\-\\.]+|" + _DOUBLE_QUOTED_STRING + "|" +
_SINGLE_QUOTED_STRING + ")";
private static final String _OPTIONAL_STRING = _STRING + "?";
- private static final String _VARIABLE_NAME = "[A-Za-z_][A-Za-z0-9_]*";
- private static final String _XML_NAME = "[A-Za-z_][A-Za-z0-9_.-]*";
+ private static final String _VARIABLE_NAME = "[A-Za-z_][A-Za-z0-9_-]*";
+
+ // '@' char is not allowed by https://www.w3.org/TR/REC-xml/#NT-NameStartChar
+ // but we allow it to be friendlier with VueJS
+ private static final String _XML_NAME = "[A-Za-z_:@][A-Za-z0-9_.-]*";
// Delimiters and punctuation
/** Constant for whitespace. */
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/parse/metapattern/parsers/VariableAssignmentParserTest.java b/wicket-util/src/test/java/org/apache/wicket/util/parse/metapattern/parsers/VariableAssignmentParserTest.java
index 9ff73b9..821d16b 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/parse/metapattern/parsers/VariableAssignmentParserTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/parse/metapattern/parsers/VariableAssignmentParserTest.java
@@ -36,20 +36,64 @@ public class VariableAssignmentParserTest extends Assert
VariableAssignmentParser parser = new VariableAssignmentParser(tagName + " name='value'");
- parser.matcher().find(tagName.length());
+ assertTrue(parser.matcher().find(tagName.length()));
assertEquals("name", parser.getKey());
assertEquals("'value'", parser.getValue());
parser = new VariableAssignmentParser(tagName + " namespace:name='value'");
- parser.matcher().find(tagName.length());
+ assertTrue(parser.matcher().find(tagName.length()));
assertEquals("namespace:name", parser.getKey());
assertEquals("'value'", parser.getValue());
parser = new VariableAssignmentParser(tagName + " namespace:name:subname='value'");
- parser.matcher().find(tagName.length());
+ assertTrue(parser.matcher().find(tagName.length()));
assertEquals("namespace:name:subname", parser.getKey());
assertEquals("'value'", parser.getValue());
}
+
+ /**
+ * https://issues.apache.org/jira/browse/WICKET-6815
+ */
+ @Test
+ public void testTagAttributeParsing()
+ {
+ String tag = "label wicket:id=\"myid\" bind:test=\"test\" v-bind:test2=\"test2\" :test3=\"test3\" @test4=\"test4\"";
+ VariableAssignmentParser attributeParser = new VariableAssignmentParser(tag);
+ int pos = 5;
+ assertTrue(attributeParser.matcher().find(pos));
+ String key = attributeParser.getKey();
+ String value = attributeParser.getValue();
+ pos = attributeParser.matcher().end(0);
+ assertEquals("wicket:id", key);
+ assertEquals("\"myid\"", value);
+
+ assertTrue(attributeParser.matcher().find(pos));
+ key = attributeParser.getKey();
+ value = attributeParser.getValue();
+ pos = attributeParser.matcher().end(0);
+ assertEquals("bind:test", key);
+ assertEquals("\"test\"", value);
+
+ assertTrue(attributeParser.matcher().find(pos));
+ key = attributeParser.getKey();
+ value = attributeParser.getValue();
+ pos = attributeParser.matcher().end(0);
+ assertEquals("v-bind:test2", key);
+ assertEquals("\"test2\"", value);
+
+ assertTrue(attributeParser.matcher().find(pos));
+ key = attributeParser.getKey();
+ value = attributeParser.getValue();
+ pos = attributeParser.matcher().end(0);
+ assertEquals(":test3", key);
+ assertEquals("\"test3\"", value);
+
+ assertTrue(attributeParser.matcher().find(pos));
+ key = attributeParser.getKey();
+ value = attributeParser.getValue();
+ assertEquals("@test4", key);
+ assertEquals("\"test4\"", value);
+ }
}