Hi,

On Fri, Sep 19, 2008 at 09:24:30PM +0200, Mike Hommey wrote:
> On Mon, Sep 15, 2008 at 08:55:10AM -0700, Kees Cook wrote:
> > As far as I know, this patch matches the upstream changes for the
> > problem.  Please see:
> > 
> > https://bugzilla.redhat.com/show_bug.cgi?id=460396
> 
> Actually there are differences between upstream and ubuntu changes:
> (a is ubuntu, b is upstream)
> 
> diff -u a/parser.c b/parser.c
> --- a/parser.c
> +++ b/parser.c
> @@ -2390,7 +2390,6 @@
>   */
>  #define growBuffer(buffer) {                                         \
>      xmlChar *tmp;                                                    \
> -    buffer##_size += XML_PARSER_BUFFER_SIZE ;                                
> \
>      buffer##_size *= 2;                                                      
> \
>      tmp = (xmlChar *)                                                        
> \
>               xmlRealloc(buffer, buffer##_size * sizeof(xmlChar));    \
> @@ -3451,7 +3450,7 @@
>                    * Just output the reference
>                    */
>                   buf[len++] = '&';
> -                 while (len > buf_size - i - 10) {
> +                 if (len > buf_size - i - 10) {
>                       growBuffer(buf);
>                   }
>                   for (;i > 0;i--)

The above changes are for CVE-2008-3529.  BTW, would it be possible to
add a patch system to libxml2?  It's much easier to split up the patches
over time, and is nice for anyone doing post-release updates. :)

> @@ -6476,8 +6475,6 @@
>                   } else if (list != NULL) {
>                       xmlFreeNodeList(list);
>                       list = NULL;
> -                 } else if (ent->owner != 1) {
> -                     ctxt->nbentities += ent->owner;
>                   }
>               }
>               ent->checked = 1;
> @@ -6668,6 +6665,8 @@
>                   ctxt->nodelen = 0;
>                   return;
>               }
> +         } else if (ent->owner != 1) {
> +             ctxt->nbentities += ent->owner;
>           }
>       } else {
>           val = ent->content;

Was this just interdiff output?  There were some changes to this area of
code that needed some by-hand backporting, so the versions used to
compare might not end up looking clean.  Or, I could have messed up the
backport, but I put them through a bunch of xml regression tests and
things seemed to be behaving.

-Kees

-- 
Kees Cook
Ubuntu Security Team



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to