diff options
author | root <root@rshg054.dnsready.net> | 2012-02-08 23:15:20 +0000 |
---|---|---|
committer | root <root@rshg054.dnsready.net> | 2012-02-08 23:15:20 +0000 |
commit | 54b7119c36756b86ea463649ee972cd6c1ce5863 (patch) | |
tree | 973aa8caa4f7be614c973b0c56390bd5c61ba985 /extra/libxslt/CVE-2011-1202.patch | |
parent | 0dee03071a0643c3ee5820afa3c694dcef71d385 (diff) |
Wed Feb 8 23:15:20 UTC 2012
Diffstat (limited to 'extra/libxslt/CVE-2011-1202.patch')
-rw-r--r-- | extra/libxslt/CVE-2011-1202.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/extra/libxslt/CVE-2011-1202.patch b/extra/libxslt/CVE-2011-1202.patch new file mode 100644 index 000000000..61ea213c8 --- /dev/null +++ b/extra/libxslt/CVE-2011-1202.patch @@ -0,0 +1,56 @@ +From ecb6bcb8d1b7e44842edde3929f412d46b40c89f Mon Sep 17 00:00:00 2001 +From: Daniel Veillard <veillard@redhat.com> +Date: Tue, 22 Feb 2011 02:14:23 +0000 +Subject: Fix generate-id() to not expose object addresses + +As pointed out by Chris Evans <scarybeasts@gmail.com> it's better +security wise to not expose object addresses directly, use a diff +w.r.t. the document root own address to avoid this +* libxslt/functions.c: fix IDs generation code +--- +diff --git a/libxslt/functions.c b/libxslt/functions.c +index 4720c7a..de962f4 100644 +--- a/libxslt/functions.c ++++ b/libxslt/functions.c +@@ -654,8 +654,9 @@ xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, int nargs) + void + xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){ + xmlNodePtr cur = NULL; +- unsigned long val; +- xmlChar str[20]; ++ long val; ++ xmlChar str[30]; ++ xmlDocPtr doc; + + if (nargs == 0) { + cur = ctxt->context->node; +@@ -694,9 +695,24 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){ + * Okay this is ugly but should work, use the NodePtr address + * to forge the ID + */ +- val = (unsigned long)((char *)cur - (char *)0); +- val /= sizeof(xmlNode); +- sprintf((char *)str, "id%ld", val); ++ if (cur->type != XML_NAMESPACE_DECL) ++ doc = cur->doc; ++ else { ++ xmlNsPtr ns = (xmlNsPtr) cur; ++ ++ if (ns->context != NULL) ++ doc = ns->context; ++ else ++ doc = ctxt->context->doc; ++ ++ } ++ ++ val = (long)((char *)cur - (char *)doc); ++ if (val >= 0) { ++ sprintf((char *)str, "idp%ld", val); ++ } else { ++ sprintf((char *)str, "idm%ld", -val); ++ } + valuePush(ctxt, xmlXPathNewString(str)); + } + +-- +cgit v0.9.0.2 |