chromium-issue-894933.patch 4.4 KB

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