xref: /aosp_15_r20/external/cronet/third_party/libxml/chromium/chromium-issue-894933.patch (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Workerdiff --git a/third_party/libxml/src/parser.c b/third_party/libxml/src/parser.c
2*6777b538SAndroid Build Coastguard Workerindex 3a8a0d79e966..4e767091683d 100644
3*6777b538SAndroid Build Coastguard Worker--- a/third_party/libxml/src/parser.c
4*6777b538SAndroid Build Coastguard Worker+++ b/third_party/libxml/src/parser.c
5*6777b538SAndroid Build Coastguard Worker@@ -2081,8 +2081,8 @@ static void xmlSHRINK (xmlParserCtxtPtr ctxt) {
6*6777b538SAndroid Build Coastguard Worker 	xmlGROW (ctxt);
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard Worker static void xmlGROW (xmlParserCtxtPtr ctxt) {
9*6777b538SAndroid Build Coastguard Worker-    unsigned long curEnd = ctxt->input->end - ctxt->input->cur;
10*6777b538SAndroid Build Coastguard Worker-    unsigned long curBase = ctxt->input->cur - ctxt->input->base;
11*6777b538SAndroid Build Coastguard Worker+    ptrdiff_t curEnd = ctxt->input->end - ctxt->input->cur;
12*6777b538SAndroid Build Coastguard Worker+    ptrdiff_t curBase = ctxt->input->cur - ctxt->input->base;
13*6777b538SAndroid Build Coastguard Worker
14*6777b538SAndroid Build Coastguard Worker     if (((curEnd > (unsigned long) XML_MAX_LOOKUP_LIMIT) ||
15*6777b538SAndroid Build Coastguard Worker          (curBase > (unsigned long) XML_MAX_LOOKUP_LIMIT)) &&
16*6777b538SAndroid Build Coastguard Worker@@ -8857,6 +8857,18 @@ xmlParseQNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *name,
17*6777b538SAndroid Build Coastguard Worker  *     caller if it was copied, this can be detected by val[*len] == 0.
18*6777b538SAndroid Build Coastguard Worker  */
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard Worker+#define GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end) \
21*6777b538SAndroid Build Coastguard Worker+    const xmlChar *oldbase = ctxt->input->base;\
22*6777b538SAndroid Build Coastguard Worker+    GROW;\
23*6777b538SAndroid Build Coastguard Worker+    if (ctxt->instate == XML_PARSER_EOF)\
24*6777b538SAndroid Build Coastguard Worker+        return(NULL);\
25*6777b538SAndroid Build Coastguard Worker+    if (oldbase != ctxt->input->base) {\
26*6777b538SAndroid Build Coastguard Worker+        ptrdiff_t delta = ctxt->input->base - oldbase;\
27*6777b538SAndroid Build Coastguard Worker+        start = start + delta;\
28*6777b538SAndroid Build Coastguard Worker+        in = in + delta;\
29*6777b538SAndroid Build Coastguard Worker+    }\
30*6777b538SAndroid Build Coastguard Worker+    end = ctxt->input->end;
31*6777b538SAndroid Build Coastguard Worker+
32*6777b538SAndroid Build Coastguard Worker static xmlChar *
33*6777b538SAndroid Build Coastguard Worker xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
34*6777b538SAndroid Build Coastguard Worker                          int normalize)
35*6777b538SAndroid Build Coastguard Worker@@ -8886,14 +8898,7 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
36*6777b538SAndroid Build Coastguard Worker     end = ctxt->input->end;
37*6777b538SAndroid Build Coastguard Worker     start = in;
38*6777b538SAndroid Build Coastguard Worker     if (in >= end) {
39*6777b538SAndroid Build Coastguard Worker-        const xmlChar *oldbase = ctxt->input->base;
40*6777b538SAndroid Build Coastguard Worker-	GROW;
41*6777b538SAndroid Build Coastguard Worker-	if (oldbase != ctxt->input->base) {
42*6777b538SAndroid Build Coastguard Worker-	    long delta = ctxt->input->base - oldbase;
43*6777b538SAndroid Build Coastguard Worker-	    start = start + delta;
44*6777b538SAndroid Build Coastguard Worker-	    in = in + delta;
45*6777b538SAndroid Build Coastguard Worker-	}
46*6777b538SAndroid Build Coastguard Worker-	end = ctxt->input->end;
47*6777b538SAndroid Build Coastguard Worker+        GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end)
48*6777b538SAndroid Build Coastguard Worker     }
49*6777b538SAndroid Build Coastguard Worker     if (normalize) {
50*6777b538SAndroid Build Coastguard Worker         /*
51*6777b538SAndroid Build Coastguard Worker@@ -8910,16 +8915,7 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
52*6777b538SAndroid Build Coastguard Worker 	    in++;
53*6777b538SAndroid Build Coastguard Worker 	    start = in;
54*6777b538SAndroid Build Coastguard Worker 	    if (in >= end) {
55*6777b538SAndroid Build Coastguard Worker-		const xmlChar *oldbase = ctxt->input->base;
56*6777b538SAndroid Build Coastguard Worker-		GROW;
57*6777b538SAndroid Build Coastguard Worker-                if (ctxt->instate == XML_PARSER_EOF)
58*6777b538SAndroid Build Coastguard Worker-                    return(NULL);
59*6777b538SAndroid Build Coastguard Worker-		if (oldbase != ctxt->input->base) {
60*6777b538SAndroid Build Coastguard Worker-		    long delta = ctxt->input->base - oldbase;
61*6777b538SAndroid Build Coastguard Worker-		    start = start + delta;
62*6777b538SAndroid Build Coastguard Worker-		    in = in + delta;
63*6777b538SAndroid Build Coastguard Worker-		}
64*6777b538SAndroid Build Coastguard Worker-		end = ctxt->input->end;
65*6777b538SAndroid Build Coastguard Worker+                GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end)
66*6777b538SAndroid Build Coastguard Worker                 if (((in - start) > XML_MAX_TEXT_LENGTH) &&
67*6777b538SAndroid Build Coastguard Worker                     ((ctxt->options & XML_PARSE_HUGE) == 0)) {
68*6777b538SAndroid Build Coastguard Worker                     xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
69*6777b538SAndroid Build Coastguard Worker@@ -8933,16 +8929,7 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
70*6777b538SAndroid Build Coastguard Worker 	    col++;
71*6777b538SAndroid Build Coastguard Worker 	    if ((*in++ == 0x20) && (*in == 0x20)) break;
72*6777b538SAndroid Build Coastguard Worker 	    if (in >= end) {
73*6777b538SAndroid Build Coastguard Worker-		const xmlChar *oldbase = ctxt->input->base;
74*6777b538SAndroid Build Coastguard Worker-		GROW;
75*6777b538SAndroid Build Coastguard Worker-                if (ctxt->instate == XML_PARSER_EOF)
76*6777b538SAndroid Build Coastguard Worker-                    return(NULL);
77*6777b538SAndroid Build Coastguard Worker-		if (oldbase != ctxt->input->base) {
78*6777b538SAndroid Build Coastguard Worker-		    long delta = ctxt->input->base - oldbase;
79*6777b538SAndroid Build Coastguard Worker-		    start = start + delta;
80*6777b538SAndroid Build Coastguard Worker-		    in = in + delta;
81*6777b538SAndroid Build Coastguard Worker-		}
82*6777b538SAndroid Build Coastguard Worker-		end = ctxt->input->end;
83*6777b538SAndroid Build Coastguard Worker+                GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end)
84*6777b538SAndroid Build Coastguard Worker                 if (((in - start) > XML_MAX_TEXT_LENGTH) &&
85*6777b538SAndroid Build Coastguard Worker                     ((ctxt->options & XML_PARSE_HUGE) == 0)) {
86*6777b538SAndroid Build Coastguard Worker                     xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
87*6777b538SAndroid Build Coastguard Worker@@ -8971,7 +8958,7 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
88*6777b538SAndroid Build Coastguard Worker                 if (ctxt->instate == XML_PARSER_EOF)
89*6777b538SAndroid Build Coastguard Worker                     return(NULL);
90*6777b538SAndroid Build Coastguard Worker 		if (oldbase != ctxt->input->base) {
91*6777b538SAndroid Build Coastguard Worker-		    long delta = ctxt->input->base - oldbase;
92*6777b538SAndroid Build Coastguard Worker+		    ptrdiff_t delta = ctxt->input->base - oldbase;
93*6777b538SAndroid Build Coastguard Worker 		    start = start + delta;
94*6777b538SAndroid Build Coastguard Worker 		    in = in + delta;
95*6777b538SAndroid Build Coastguard Worker 		    last = last + delta;
96*6777b538SAndroid Build Coastguard Worker@@ -8998,16 +8985,7 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
97*6777b538SAndroid Build Coastguard Worker 	    in++;
98*6777b538SAndroid Build Coastguard Worker 	    col++;
99*6777b538SAndroid Build Coastguard Worker 	    if (in >= end) {
100*6777b538SAndroid Build Coastguard Worker-		const xmlChar *oldbase = ctxt->input->base;
101*6777b538SAndroid Build Coastguard Worker-		GROW;
102*6777b538SAndroid Build Coastguard Worker-                if (ctxt->instate == XML_PARSER_EOF)
103*6777b538SAndroid Build Coastguard Worker-                    return(NULL);
104*6777b538SAndroid Build Coastguard Worker-		if (oldbase != ctxt->input->base) {
105*6777b538SAndroid Build Coastguard Worker-		    long delta = ctxt->input->base - oldbase;
106*6777b538SAndroid Build Coastguard Worker-		    start = start + delta;
107*6777b538SAndroid Build Coastguard Worker-		    in = in + delta;
108*6777b538SAndroid Build Coastguard Worker-		}
109*6777b538SAndroid Build Coastguard Worker-		end = ctxt->input->end;
110*6777b538SAndroid Build Coastguard Worker+                GROW_PARSE_ATT_VALUE_INTERNAL(ctxt, in, start, end)
111*6777b538SAndroid Build Coastguard Worker                 if (((in - start) > XML_MAX_TEXT_LENGTH) &&
112*6777b538SAndroid Build Coastguard Worker                     ((ctxt->options & XML_PARSE_HUGE) == 0)) {
113*6777b538SAndroid Build Coastguard Worker                     xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
114