[Reproducible-commits] [libxslt] 01/04: Fix generate-id() to not expose object addresses

Mattia Rizzolo mattia at debian.org
Fri May 20 12:49:10 UTC 2016


This is an automated email from the git hooks/post-receive script.

mattia pushed a commit to annotated tag debian/1.1.26-6+squeeze1
in repository libxslt.

commit dbb14e5be43bf20c8b7a2e37bda1d8f7867dc56b
Author: Daniel Veillard <veillard at redhat.com>
Date:   Tue Feb 22 10:14:23 2011 +0800

    Fix generate-id() to not expose object addresses
    
    As pointed out by Chris Evans <scarybeasts at 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
---
 libxslt/functions.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

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));
 }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/libxslt.git



More information about the Reproducible-commits mailing list