author | Petr Sumbera <petr.sumbera@oracle.com> |
Fri, 19 Jun 2015 06:25:20 -0700 | |
changeset 4533 | 7a8571820e6e |
permissions | -rw-r--r-- |
4533
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
1 |
Patch origin: community |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
2 |
Patch status: unknown, needs to be verified by upstream |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
3 |
|
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
4 |
https://bugzilla.gnome.org/show_bug.cgi?id=746048 |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
5 |
|
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
6 |
diff --git a/HTMLparser.c b/HTMLparser.c |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
7 |
index d329d3b..6f81424 100644 |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
8 |
--- a/HTMLparser.c |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
9 |
+++ b/HTMLparser.c |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
10 |
@@ -3245,13 +3245,20 @@ htmlParseComment(htmlParserCtxtPtr ctxt) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
11 |
ctxt->instate = state; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
12 |
return; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
13 |
} |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
14 |
+ if ((ctxt->input->end - ctxt->input->cur) < 3) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
15 |
+ ctxt->instate = XML_PARSER_EOF; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
16 |
+ htmlParseErr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
17 |
+ "Comment not terminated\n", NULL, NULL); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
18 |
+ xmlFree(buf); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
19 |
+ return; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
20 |
+ } |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
21 |
q = CUR_CHAR(ql); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
22 |
NEXTL(ql); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
23 |
r = CUR_CHAR(rl); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
24 |
NEXTL(rl); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
25 |
cur = CUR_CHAR(l); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
26 |
len = 0; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
27 |
- while (IS_CHAR(cur) && |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
28 |
+ while (((ctxt->input->end - ctxt->input->cur) > 0) && IS_CHAR(cur) && |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
29 |
((cur != '>') || |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
30 |
(r != '-') || (q != '-'))) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
31 |
if (len + 5 >= size) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
32 |
@@ -3281,7 +3288,7 @@ htmlParseComment(htmlParserCtxtPtr ctxt) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
33 |
} |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
34 |
} |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
35 |
buf[len] = 0; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
36 |
- if (!IS_CHAR(cur)) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
37 |
+ if (!(ctxt->input->end - ctxt->input->cur) || !IS_CHAR(cur)) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
38 |
htmlParseErr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
39 |
"Comment not terminated \n<!--%.50s\n", buf, NULL); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
40 |
xmlFree(buf); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
41 |
@@ -4465,6 +4472,7 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
42 |
depth = ctxt->nameNr; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
43 |
while (1) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
44 |
long cons = ctxt->nbChars; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
45 |
+ long rem = ctxt->input->end - ctxt->input->cur; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
46 |
|
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
47 |
GROW; |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
48 |
|
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
49 |
@@ -4540,7 +4548,7 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
50 |
/* |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
51 |
* Sometimes DOCTYPE arrives in the middle of the document |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
52 |
*/ |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
53 |
- if ((CUR == '<') && (NXT(1) == '!') && |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
54 |
+ if ((rem >= 9) && (CUR == '<') && (NXT(1) == '!') && |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
55 |
(UPP(2) == 'D') && (UPP(3) == 'O') && |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
56 |
(UPP(4) == 'C') && (UPP(5) == 'T') && |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
57 |
(UPP(6) == 'Y') && (UPP(7) == 'P') && |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
58 |
@@ -4554,7 +4562,7 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
59 |
/* |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
60 |
* First case : a comment |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
61 |
*/ |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
62 |
- if ((CUR == '<') && (NXT(1) == '!') && |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
63 |
+ if ((rem >= 4) && (CUR == '<') && (NXT(1) == '!') && |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
64 |
(NXT(2) == '-') && (NXT(3) == '-')) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
65 |
htmlParseComment(ctxt); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
66 |
} |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
67 |
@@ -4562,14 +4570,14 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
68 |
/* |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
69 |
* Second case : a Processing Instruction. |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
70 |
*/ |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
71 |
- else if ((CUR == '<') && (NXT(1) == '?')) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
72 |
+ else if ((rem >= 2) && (CUR == '<') && (NXT(1) == '?')) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
73 |
htmlParsePI(ctxt); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
74 |
} |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
75 |
|
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
76 |
/* |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
77 |
* Third case : a sub-element. |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
78 |
*/ |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
79 |
- else if (CUR == '<') { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
80 |
+ else if ((rem >= 1) && (CUR == '<')) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
81 |
htmlParseElementInternal(ctxt); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
82 |
if (currentNode != NULL) xmlFree(currentNode); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
83 |
|
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
84 |
@@ -4581,7 +4589,7 @@ htmlParseContentInternal(htmlParserCtxtPtr ctxt) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
85 |
* Fourth case : a reference. If if has not been resolved, |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
86 |
* parsing returns it's Name, create the node |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
87 |
*/ |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
88 |
- else if (CUR == '&') { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
89 |
+ else if ((rem >= 1) && (CUR == '&')) { |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
90 |
htmlParseReference(ctxt); |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
91 |
} |
7a8571820e6e
20912751 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
92 |