mirror of
https://github.com/zeux/pugixml.git
synced 2024-12-26 21:04:25 +08:00
Never escape > in attribute values
According to XML spec, > sometimes needs to be escaped in PCDATA (when it occurs as a ]]> pattern), but it doesn't need to be escaped in attribute values. Contributes to #272.
This commit is contained in:
parent
946de603b1
commit
c6607740a0
@ -1861,7 +1861,7 @@ PUGI__NS_BEGIN
|
|||||||
enum chartypex_t
|
enum chartypex_t
|
||||||
{
|
{
|
||||||
ctx_special_pcdata = 1, // Any symbol >= 0 and < 32 (except \t, \r, \n), &, <, >
|
ctx_special_pcdata = 1, // Any symbol >= 0 and < 32 (except \t, \r, \n), &, <, >
|
||||||
ctx_special_attr = 2, // Any symbol >= 0 and < 32, &, <, >, ", '
|
ctx_special_attr = 2, // Any symbol >= 0 and < 32, &, <, ", '
|
||||||
ctx_start_symbol = 4, // Any symbol > 127, a-z, A-Z, _
|
ctx_start_symbol = 4, // Any symbol > 127, a-z, A-Z, _
|
||||||
ctx_digit = 8, // 0-9
|
ctx_digit = 8, // 0-9
|
||||||
ctx_symbol = 16 // Any symbol > 127, a-z, A-Z, 0-9, _, -, .
|
ctx_symbol = 16 // Any symbol > 127, a-z, A-Z, 0-9, _, -, .
|
||||||
@ -1872,7 +1872,7 @@ PUGI__NS_BEGIN
|
|||||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, // 0-15
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, // 0-15
|
||||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 16-31
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 16-31
|
||||||
0, 0, 2, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 16, 16, 0, // 32-47
|
0, 0, 2, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 16, 16, 0, // 32-47
|
||||||
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 3, 0, 3, 0, // 48-63
|
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 3, 0, 1, 0, // 48-63
|
||||||
|
|
||||||
0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 64-79
|
0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 64-79
|
||||||
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 20, // 80-95
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 20, // 80-95
|
||||||
|
@ -193,8 +193,8 @@ TEST_XML(write_escape, "<node attr=''>text</node>")
|
|||||||
doc.child(STR("node")).attribute(STR("attr")) = STR("<>'\"&\x04\r\n\t");
|
doc.child(STR("node")).attribute(STR("attr")) = STR("<>'\"&\x04\r\n\t");
|
||||||
doc.child(STR("node")).first_child().set_value(STR("<>'\"&\x04\r\n\t"));
|
doc.child(STR("node")).first_child().set_value(STR("<>'\"&\x04\r\n\t"));
|
||||||
|
|
||||||
CHECK_NODE(doc, STR("<node attr=\"<>'"& 	\"><>'\"&\r\n\t</node>"));
|
CHECK_NODE(doc, STR("<node attr=\"<>'"& 	\"><>'\"&\r\n\t</node>"));
|
||||||
CHECK_NODE_EX(doc, STR("<node attr='<>'\"& 	'><>'\"&\r\n\t</node>"), STR(""), format_raw | format_attribute_single_quote);
|
CHECK_NODE_EX(doc, STR("<node attr='<>'\"& 	'><>'\"&\r\n\t</node>"), STR(""), format_raw | format_attribute_single_quote);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_XML(write_escape_roundtrip, "<node attr=''>text</node>")
|
TEST_XML(write_escape_roundtrip, "<node attr=''>text</node>")
|
||||||
@ -208,8 +208,8 @@ TEST_XML(write_escape_roundtrip, "<node attr=''>text</node>")
|
|||||||
|
|
||||||
// Note: this string is almost identical to the string from write_escape with the exception of \r
|
// Note: this string is almost identical to the string from write_escape with the exception of \r
|
||||||
// \r in PCDATA doesn't roundtrip because it has to go through newline conversion (which could be disabled, but is active by default)
|
// \r in PCDATA doesn't roundtrip because it has to go through newline conversion (which could be disabled, but is active by default)
|
||||||
CHECK_NODE(doc, STR("<node attr=\"<>'"& 	\"><>'\"&\n\t</node>"));
|
CHECK_NODE(doc, STR("<node attr=\"<>'"& 	\"><>'\"&\n\t</node>"));
|
||||||
CHECK_NODE_EX(doc, STR("<node attr='<>'\"& 	'><>'\"&\n\t</node>"), STR(""), format_raw | format_attribute_single_quote);
|
CHECK_NODE_EX(doc, STR("<node attr='<>'\"& 	'><>'\"&\n\t</node>"), STR(""), format_raw | format_attribute_single_quote);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_XML(write_escape_unicode, "<node attr='㰀'/>")
|
TEST_XML(write_escape_unicode, "<node attr='㰀'/>")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user