On 02.06.2017 - 12:26:46, Paul Irofti wrote:
> On Thu, Jun 01, 2017 at 09:09:48AM +0200, Matthias Pitzl wrote:
> > Hi,
> >
> > On the oss-security mailing list where reports about several CVEs concerning
> > libxml2.
> > These patches fixes CVE-2017-9047, CVE-2017-9048, CVE-2017-9049 and
> > CVE-2017-9050.
>
> OK?
Looks good for me :)
Sorry for not making a complete diff against the port itself.
-- Matthias
>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/textproc/libxml/Makefile,v
> retrieving revision 1.168
> diff -u -p -u -p -r1.168 Makefile
> --- Makefile 30 Dec 2016 15:54:57 -0000 1.168
> +++ Makefile 2 Jun 2017 09:26:07 -0000
> @@ -4,7 +4,7 @@ COMMENT-main= XML parsing library
> COMMENT-python= Python bindings for libxml
>
> VERSION= 2.9.4
> -REVISION-main= 0
> +REVISION-main= 1
> DISTNAME= libxml2-${VERSION}
> PKGNAME-main= libxml-${VERSION}
> PKGNAME-python= py-libxml-${VERSION}
> Index: patches/patch-parser_c
> ===================================================================
> RCS file: patches/patch-parser_c
> diff -N patches/patch-parser_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-parser_c 2 Jun 2017 09:26:07 -0000
> @@ -0,0 +1,38 @@
> +$OpenBSD$
> +
> +Fix CVE-2017-9049 and CVE-2017-9050.
> +
> +Index: parser.c
> +--- parser.c.orig
> ++++ parser.c
> +@@ -3312,6 +3312,7 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
> + int len = 0, l;
> + int c;
> + int count = 0;
> ++ size_t startPosition = 0;
> +
> + #ifdef DEBUG
> + nbParseNameComplex++;
> +@@ -3323,6 +3324,7 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
> + GROW;
> + if (ctxt->instate == XML_PARSER_EOF)
> + return(NULL);
> ++ startPosition = CUR_PTR - BASE_PTR;
> + c = CUR_CHAR(l);
> + if ((ctxt->options & XML_PARSE_OLD10) == 0) {
> + /*
> +@@ -3420,9 +3422,11 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
> + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name");
> + return(NULL);
> + }
> +- if ((*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r'))
> +- return(xmlDictLookup(ctxt->dict, ctxt->input->cur - (len + 1),
> len));
> +- return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len));
> ++
> ++ if (BASE_PTR + startPosition + len > ctxt->input->end)
> ++ return(NULL);
> ++
> ++ return(xmlDictLookup(ctxt->dict, BASE_PTR + startPosition, len));
> + }
> +
> + /**
> Index: patches/patch-valid_c
> ===================================================================
> RCS file: patches/patch-valid_c
> diff -N patches/patch-valid_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-valid_c 2 Jun 2017 09:26:07 -0000
> @@ -0,0 +1,23 @@
> +$OpenBSD$
> +
> +Fix CVE-2017-9047 and CVE-2017-9048.
> +
> +Index: valid.c
> +--- valid.c.orig
> ++++ valid.c
> +@@ -1270,6 +1270,7 @@ xmlSnprintfElementContent(char *buf, int size, xmlElem
> + }
> + strcat(buf, (char *) content->prefix);
> + strcat(buf, ":");
> ++ len += xmlStrlen(content->prefix);
> + }
> + if (size - len < xmlStrlen(content->name) + 10) {
> + strcat(buf, " ...");
> +@@ -1319,6 +1320,7 @@ xmlSnprintfElementContent(char *buf, int size, xmlElem
> + xmlSnprintfElementContent(buf, size, content->c2, 0);
> + break;
> + }
> ++ if (size - strlen(buf) <= 2) return;
> + if (englob)
> + strcat(buf, ")");
> + switch (content->ocur) {