author | Petr Sumbera <petr.sumbera@oracle.com> |
Mon, 04 Feb 2013 08:38:32 -0800 | |
branch | s11u1-sru |
changeset 2482 | c53d740a9580 |
permissions | -rw-r--r-- |
2482
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
1 |
From 459eeb9dc752d5185f57ff6b135027f11981a626 Mon Sep 17 00:00:00 2001 |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
2 |
From: Daniel Veillard <[email protected]> |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
3 |
Date: Tue, 17 Jul 2012 08:19:17 +0000 |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
4 |
Subject: Fix parser local buffers size problems |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
5 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
6 |
--- |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
7 |
diff --git a/parser.c b/parser.c |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
8 |
index 2c38fae..9863275 100644 |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
9 |
--- a/parser.c |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
10 |
+++ b/parser.c |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
11 |
@@ -40,6 +40,7 @@ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
12 |
#endif |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
13 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
14 |
#include <stdlib.h> |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
15 |
+#include <limits.h> |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
16 |
#include <string.h> |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
17 |
#include <stdarg.h> |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
18 |
#include <libxml/xmlmemory.h> |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
19 |
@@ -117,10 +118,10 @@ xmlCreateEntityParserCtxtInternal(const xmlChar *URL, const xmlChar *ID, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
20 |
* parser option. |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
21 |
*/ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
22 |
static int |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
23 |
-xmlParserEntityCheck(xmlParserCtxtPtr ctxt, unsigned long size, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
24 |
+xmlParserEntityCheck(xmlParserCtxtPtr ctxt, size_t size, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
25 |
xmlEntityPtr ent) |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
26 |
{ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
27 |
- unsigned long consumed = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
28 |
+ size_t consumed = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
29 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
30 |
if ((ctxt == NULL) || (ctxt->options & XML_PARSE_HUGE)) |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
31 |
return (0); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
32 |
@@ -2589,15 +2590,17 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
33 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
34 |
/* |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
35 |
* Macro used to grow the current buffer. |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
36 |
+ * buffer##_size is expected to be a size_t |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
37 |
+ * mem_error: is expected to handle memory allocation failures |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
38 |
*/ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
39 |
#define growBuffer(buffer, n) { \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
40 |
xmlChar *tmp; \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
41 |
- buffer##_size *= 2; \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
42 |
- buffer##_size += n; \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
43 |
- tmp = (xmlChar *) \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
44 |
- xmlRealloc(buffer, buffer##_size * sizeof(xmlChar)); \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
45 |
+ size_t new_size = buffer##_size * 2 + n; \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
46 |
+ if (new_size < buffer##_size) goto mem_error; \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
47 |
+ tmp = (xmlChar *) xmlRealloc(buffer, new_size); \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
48 |
if (tmp == NULL) goto mem_error; \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
49 |
buffer = tmp; \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
50 |
+ buffer##_size = new_size; \ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
51 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
52 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
53 |
/** |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
54 |
@@ -2623,14 +2626,14 @@ xmlChar * |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
55 |
xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
56 |
int what, xmlChar end, xmlChar end2, xmlChar end3) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
57 |
xmlChar *buffer = NULL; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
58 |
- int buffer_size = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
59 |
+ size_t buffer_size = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
60 |
+ size_t nbchars = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
61 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
62 |
xmlChar *current = NULL; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
63 |
xmlChar *rep = NULL; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
64 |
const xmlChar *last; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
65 |
xmlEntityPtr ent; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
66 |
int c,l; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
67 |
- int nbchars = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
68 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
69 |
if ((ctxt == NULL) || (str == NULL) || (len < 0)) |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
70 |
return(NULL); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
71 |
@@ -2647,7 +2650,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
72 |
* allocate a translation buffer. |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
73 |
*/ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
74 |
buffer_size = XML_PARSER_BIG_BUFFER_SIZE; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
75 |
- buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar)); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
76 |
+ buffer = (xmlChar *) xmlMallocAtomic(buffer_size); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
77 |
if (buffer == NULL) goto mem_error; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
78 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
79 |
/* |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
80 |
@@ -2667,7 +2670,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
81 |
if (val != 0) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
82 |
COPY_BUF(0,buffer,nbchars,val); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
83 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
84 |
- if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
85 |
+ if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
86 |
growBuffer(buffer, XML_PARSER_BUFFER_SIZE); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
87 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
88 |
} else if ((c == '&') && (what & XML_SUBSTITUTE_REF)) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
89 |
@@ -2685,7 +2688,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
90 |
(ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
91 |
if (ent->content != NULL) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
92 |
COPY_BUF(0,buffer,nbchars,ent->content[0]); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
93 |
- if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
94 |
+ if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
95 |
growBuffer(buffer, XML_PARSER_BUFFER_SIZE); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
96 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
97 |
} else { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
98 |
@@ -2702,8 +2705,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
99 |
current = rep; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
100 |
while (*current != 0) { /* non input consuming loop */ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
101 |
buffer[nbchars++] = *current++; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
102 |
- if (nbchars > |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
103 |
- buffer_size - XML_PARSER_BUFFER_SIZE) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
104 |
+ if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
105 |
if (xmlParserEntityCheck(ctxt, nbchars, ent)) |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
106 |
goto int_error; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
107 |
growBuffer(buffer, XML_PARSER_BUFFER_SIZE); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
108 |
@@ -2717,7 +2719,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
109 |
const xmlChar *cur = ent->name; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
110 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
111 |
buffer[nbchars++] = '&'; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
112 |
- if (nbchars > buffer_size - i - XML_PARSER_BUFFER_SIZE) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
113 |
+ if (nbchars + i + XML_PARSER_BUFFER_SIZE > buffer_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
114 |
growBuffer(buffer, i + XML_PARSER_BUFFER_SIZE); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
115 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
116 |
for (;i > 0;i--) |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
117 |
@@ -2745,8 +2747,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
118 |
current = rep; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
119 |
while (*current != 0) { /* non input consuming loop */ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
120 |
buffer[nbchars++] = *current++; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
121 |
- if (nbchars > |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
122 |
- buffer_size - XML_PARSER_BUFFER_SIZE) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
123 |
+ if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
124 |
if (xmlParserEntityCheck(ctxt, nbchars, ent)) |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
125 |
goto int_error; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
126 |
growBuffer(buffer, XML_PARSER_BUFFER_SIZE); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
127 |
@@ -2759,8 +2760,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
128 |
} else { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
129 |
COPY_BUF(l,buffer,nbchars,c); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
130 |
str += l; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
131 |
- if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
132 |
- growBuffer(buffer, XML_PARSER_BUFFER_SIZE); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
133 |
+ if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
134 |
+ growBuffer(buffer, XML_PARSER_BUFFER_SIZE); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
135 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
136 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
137 |
if (str < last) |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
138 |
@@ -3764,8 +3765,8 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
139 |
xmlChar limit = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
140 |
xmlChar *buf = NULL; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
141 |
xmlChar *rep = NULL; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
142 |
- int len = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
143 |
- int buf_size = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
144 |
+ size_t len = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
145 |
+ size_t buf_size = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
146 |
int c, l, in_space = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
147 |
xmlChar *current = NULL; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
148 |
xmlEntityPtr ent; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
149 |
@@ -3787,7 +3788,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
150 |
* allocate a translation buffer. |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
151 |
*/ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
152 |
buf_size = XML_PARSER_BUFFER_SIZE; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
153 |
- buf = (xmlChar *) xmlMallocAtomic(buf_size * sizeof(xmlChar)); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
154 |
+ buf = (xmlChar *) xmlMallocAtomic(buf_size); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
155 |
if (buf == NULL) goto mem_error; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
156 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
157 |
/* |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
158 |
@@ -3804,7 +3805,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
159 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
160 |
if (val == '&') { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
161 |
if (ctxt->replaceEntities) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
162 |
- if (len > buf_size - 10) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
163 |
+ if (len + 10 > buf_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
164 |
growBuffer(buf, 10); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
165 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
166 |
buf[len++] = '&'; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
167 |
@@ -3813,7 +3814,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
168 |
* The reparsing will be done in xmlStringGetNodeList() |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
169 |
* called by the attribute() function in SAX.c |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
170 |
*/ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
171 |
- if (len > buf_size - 10) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
172 |
+ if (len + 10 > buf_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
173 |
growBuffer(buf, 10); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
174 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
175 |
buf[len++] = '&'; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
176 |
@@ -3823,7 +3824,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
177 |
buf[len++] = ';'; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
178 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
179 |
} else if (val != 0) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
180 |
- if (len > buf_size - 10) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
181 |
+ if (len + 10 > buf_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
182 |
growBuffer(buf, 10); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
183 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
184 |
len += xmlCopyChar(0, &buf[len], val); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
185 |
@@ -3835,7 +3836,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
186 |
ctxt->nbentities += ent->owner; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
187 |
if ((ent != NULL) && |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
188 |
(ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
189 |
- if (len > buf_size - 10) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
190 |
+ if (len + 10 > buf_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
191 |
growBuffer(buf, 10); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
192 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
193 |
if ((ctxt->replaceEntities == 0) && |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
194 |
@@ -3863,7 +3864,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
195 |
current++; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
196 |
} else |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
197 |
buf[len++] = *current++; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
198 |
- if (len > buf_size - 10) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
199 |
+ if (len + 10 > buf_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
200 |
growBuffer(buf, 10); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
201 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
202 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
203 |
@@ -3871,7 +3872,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
204 |
rep = NULL; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
205 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
206 |
} else { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
207 |
- if (len > buf_size - 10) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
208 |
+ if (len + 10 > buf_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
209 |
growBuffer(buf, 10); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
210 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
211 |
if (ent->content != NULL) |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
212 |
@@ -3899,7 +3900,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
213 |
* Just output the reference |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
214 |
*/ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
215 |
buf[len++] = '&'; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
216 |
- while (len > buf_size - i - 10) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
217 |
+ while (len + i + 10 > buf_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
218 |
growBuffer(buf, i + 10); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
219 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
220 |
for (;i > 0;i--) |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
221 |
@@ -3912,7 +3913,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
222 |
if ((len != 0) || (!normalize)) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
223 |
if ((!normalize) || (!in_space)) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
224 |
COPY_BUF(l,buf,len,0x20); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
225 |
- while (len > buf_size - 10) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
226 |
+ while (len + 10 > buf_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
227 |
growBuffer(buf, 10); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
228 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
229 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
230 |
@@ -3921,7 +3922,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
231 |
} else { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
232 |
in_space = 0; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
233 |
COPY_BUF(l,buf,len,c); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
234 |
- if (len > buf_size - 10) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
235 |
+ if (len + 10 > buf_size) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
236 |
growBuffer(buf, 10); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
237 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
238 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
239 |
@@ -3946,7 +3947,18 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
240 |
} |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
241 |
} else |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
242 |
NEXT; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
243 |
- if (attlen != NULL) *attlen = len; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
244 |
+ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
245 |
+ /* |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
246 |
+ * There we potentially risk an overflow, don't allow attribute value of |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
247 |
+ * lenght more than INT_MAX it is a very reasonnable assumption ! |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
248 |
+ */ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
249 |
+ if (len >= INT_MAX) { |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
250 |
+ xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED, |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
251 |
+ "AttValue lenght too long\n"); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
252 |
+ goto mem_error; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
253 |
+ } |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
254 |
+ |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
255 |
+ if (attlen != NULL) *attlen = (int) len; |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
256 |
return(buf); |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
257 |
|
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
258 |
mem_error: |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
259 |
-- |
c53d740a9580
15808846 problem in LIBRARY/LIBXML
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
260 |
cgit v0.9.0.2 |