[libxml2] Heap use-after-free in xmlSAX2AttributeNs



commit 38eae571111db3b43ffdeb05487c9f60551906fb
Author: Pranjal Jumde <pjumde apple com>
Date:   Mon Mar 7 14:04:08 2016 -0800

    Heap use-after-free in xmlSAX2AttributeNs
    
    For https://bugzilla.gnome.org/show_bug.cgi?id=759020
    
    * parser.c:
    (xmlParseStartTag2): Attribute strings are only valid if the
    base does not change, so add another check where the base may
    change.  Make sure to set 'attvalue' to NULL after freeing it.
    * result/errors/759020.xml: Added.
    * result/errors/759020.xml.err: Added.
    * result/errors/759020.xml.str: Added.
    * test/errors/759020.xml: Added test case.

 parser.c                     |   12 +++++++++-
 result/errors/759020.xml.err |    6 +++++
 result/errors/759020.xml.str |    7 ++++++
 test/errors/759020.xml       |   46 ++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 69 insertions(+), 2 deletions(-)
---
diff --git a/parser.c b/parser.c
index 15c606f..7aba6a9 100644
--- a/parser.c
+++ b/parser.c
@@ -9488,7 +9488,10 @@ reparse:
                else
                    if (nsPush(ctxt, NULL, URL) > 0) nbNs++;
 skip_default_ns:
-               if (alloc != 0) xmlFree(attvalue);
+               if ((attvalue != NULL) && (alloc != 0)) {
+                   xmlFree(attvalue);
+                   attvalue = NULL;
+               }
                if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
                    break;
                if (!IS_BLANK_CH(RAW)) {
@@ -9497,6 +9500,8 @@ skip_default_ns:
                    break;
                }
                SKIP_BLANKS;
+               if ((ctxt->input->base != base) || (inputNr != ctxt->inputNr))
+                   goto base_changed;
                continue;
            }
             if (aprefix == ctxt->str_xmlns) {
@@ -9568,7 +9573,10 @@ skip_default_ns:
                else
                    if (nsPush(ctxt, attname, URL) > 0) nbNs++;
 skip_ns:
-               if (alloc != 0) xmlFree(attvalue);
+               if ((attvalue != NULL) && (alloc != 0)) {
+                   xmlFree(attvalue);
+                   attvalue = NULL;
+               }
                if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
                    break;
                if (!IS_BLANK_CH(RAW)) {
diff --git a/result/errors/759020.xml b/result/errors/759020.xml
new file mode 100644
index 0000000..e69de29
diff --git a/result/errors/759020.xml.err b/result/errors/759020.xml.err
new file mode 100644
index 0000000..a0d3051
--- /dev/null
+++ b/result/errors/759020.xml.err
@@ -0,0 +1,6 @@
+./test/errors/759020.xml:3: namespace warning : xmlns: URI 
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 is not absolute
+0000000000000000000000000000000000000000000000000000000000000000000000000000000'
+                                                                               ^
+./test/errors/759020.xml:46: parser error : Couldn't find end of Start Tag s00 line 2
+                                                                   
+                                                                   ^
diff --git a/result/errors/759020.xml.str b/result/errors/759020.xml.str
new file mode 100644
index 0000000..998d6d2
--- /dev/null
+++ b/result/errors/759020.xml.str
@@ -0,0 +1,7 @@
+./test/errors/759020.xml:3: namespace warning : xmlns: URI 
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 is not absolute
+0000000000000000000000000000000000000000000000000000000000000000000000000000000'
+                                                                               ^
+./test/errors/759020.xml:46: parser error : Couldn't find end of Start Tag s00
+                                                                   
+                                                                   ^
+./test/errors/759020.xml : failed to parse
diff --git a/test/errors/759020.xml b/test/errors/759020.xml
new file mode 100644
index 0000000..db23275
--- /dev/null
+++ b/test/errors/759020.xml
@@ -0,0 +1,46 @@
+<?l 00000000000000000000000000000?>
+<s00 w0000="000" h00000="000"
+ xmlns = 
'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
       
+                                                                              
+                                                                              
+                                                                              
+           
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                              
+                                                                   
\ No newline at end of file


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]