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