components/libxml2/patches/24-libxml2-Fix-parser-local-buffers-size-problems.patch
author Petr Sumbera <petr.sumbera@oracle.com>
Mon, 04 Feb 2013 08:38:32 -0800
branchs11u1-sru
changeset 2482 c53d740a9580
permissions -rw-r--r--
15808846 problem in LIBRARY/LIBXML
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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