diff options
author | Bjorn Munch <bjorn.munch@oracle.com> | 2011-01-19 11:19:54 +0100 |
---|---|---|
committer | Bjorn Munch <bjorn.munch@oracle.com> | 2011-01-19 11:19:54 +0100 |
commit | 65d6cf7946bead8456d2236f3643988f67fed30d (patch) | |
tree | d33558a02f23f353b42f1e3e6b2d4daa8456f662 /strings | |
parent | 00a6d119ea0f8fa894c24096b9ed96eb3fbe50cd (diff) | |
parent | 77bc81b89ca65edb244fe4da30ca61e2f97cb5de (diff) | |
download | mariadb-git-65d6cf7946bead8456d2236f3643988f67fed30d.tar.gz |
merge from 5.1 main
Diffstat (limited to 'strings')
-rw-r--r-- | strings/xml.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/strings/xml.c b/strings/xml.c index f3cfaad54fa..dee9da2864c 100644 --- a/strings/xml.c +++ b/strings/xml.c @@ -106,6 +106,13 @@ static void my_xml_norm_text(MY_XML_ATTR *a) } +static inline my_bool +my_xml_parser_prefix_cmp(MY_XML_PARSER *p, const char *s, size_t slen) +{ + return (p->cur + slen > p->end) || memcmp(p->cur, s, slen); +} + + static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a) { int lex; @@ -123,16 +130,20 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a) a->beg=p->cur; a->end=p->cur; - if ((p->end - p->cur > 3) && !memcmp(p->cur,"<!--",4)) + if (!my_xml_parser_prefix_cmp(p, C_STRING_WITH_LEN("<!--"))) { - for (; (p->cur < p->end) && memcmp(p->cur, "-->", 3); p->cur++) - {} - if (!memcmp(p->cur, "-->", 3)) - p->cur+=3; + for (; p->cur < p->end; p->cur++) + { + if (!my_xml_parser_prefix_cmp(p, C_STRING_WITH_LEN("-->"))) + { + p->cur+= 3; + break; + } + } a->end=p->cur; lex=MY_XML_COMMENT; } - else if (!memcmp(p->cur, "<![CDATA[",9)) + else if (!my_xml_parser_prefix_cmp(p, C_STRING_WITH_LEN("<![CDATA["))) { p->cur+= 9; for (; p->cur < p->end - 2 ; p->cur++) |