~ubuntu-branches/ubuntu/hardy/libxslt/hardy-security

« back to all changes in this revision

Viewing changes to libxslt/functions.c

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2012-09-28 15:40:31 UTC
  • Revision ID: package-import@ubuntu.com-20120928154031-ycs5jnt2ykqrazyd
Tags: 1.1.22-1ubuntu1.3
* SECURITY UPDATE: information disclosure via generate-id XPath function
  - libxslt/functions.c: do not expose object addresses directly.
  - ecb6bcb8d1b7e44842edde3929f412d46b40c89f
  - CVE-2011-1202
* SECURITY UPDATE: denial of service via out-of-bounds read
  - libxslt/pattern.c: fix improper loop exit.
  - fe5a4fa33eb85bce3253ed3742b1ea6c4b59b41b
  - CVE-2011-3970
* SECURITY UPDATE: denial of service via out-of-bounds read
  - libxslt/xsltutils.h: check for XML_ELEMENT_NODE
  - e6a0bc8081271f33b9899eb78e1da1a2a0428419
  - CVE-2012-2825
* SECURITY UPDATE: denial of service via crafted XSLT expression
  - harden code in libexslt/functions.c, libxslt/attributes.c,
    libxslt/functions.c, libxslt/pattern.c, libxslt/preproc.c,
    libxslt/templates.c, libxslt/transform.c, libxslt/variables.c,
    libxslt/xslt.c, libxslt/xsltutils.c.
  - 8566ab4a10158d195adb5f1f61afe1ee8bfebd12
  - 4da0f7e207f14a03daad4663865c285eb27f93e9
  - 24653072221e76d2f1f06aa71225229b532f8946
  - 1564b30e994602a95863d9716be83612580a2fed
  - CVE-2012-2870
* SECURITY UPDATE: denial of service and possible code execution during
  handling of XSL transforms
  - libxslt/transform.c: check for XML_NAMESPACE_DECL
  - 937ba2a3eb42d288f53c8adc211bd1122869f0bf
  - CVE-2012-2871
* SECURITY UPDATE: denial of service and possible code execution via
  double free during XSL transforms
  - libxslt/templates.c: Fix dictionary string usage
  - 54977ed7966847e305a2008cb18892df26eeb065
  - CVE-2012-2893

Show diffs side-by-side

added added

removed removed

Lines of Context:
654
654
void
655
655
xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){
656
656
    xmlNodePtr cur = NULL;
657
 
    unsigned long val;
658
 
    xmlChar str[20];
 
657
    xmlXPathObjectPtr obj = NULL;
 
658
    long val;
 
659
    xmlChar str[30];
 
660
    xmlDocPtr doc;
659
661
 
660
662
    if (nargs == 0) {
661
663
        cur = ctxt->context->node;
662
664
    } else if (nargs == 1) {
663
 
        xmlXPathObjectPtr obj;
664
665
        xmlNodeSetPtr nodelist;
665
666
        int i, ret;
666
667
 
683
684
            if (ret == -1)
684
685
                cur = nodelist->nodeTab[i];
685
686
        }
686
 
        xmlXPathFreeObject(obj);
687
687
    } else {
688
688
        xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
689
689
                "generate-id() : invalid number of args %d\n", nargs);
694
694
     * Okay this is ugly but should work, use the NodePtr address
695
695
     * to forge the ID
696
696
     */
697
 
    val = (unsigned long)((char *)cur - (char *)0);
698
 
    val /= sizeof(xmlNode);
699
 
    sprintf((char *)str, "id%ld", val);
 
697
    if (cur->type != XML_NAMESPACE_DECL)
 
698
        doc = cur->doc;
 
699
    else {
 
700
        xmlNsPtr ns = (xmlNsPtr) cur;
 
701
 
 
702
        if (ns->context != NULL)
 
703
            doc = ns->context;
 
704
        else
 
705
            doc = ctxt->context->doc;
 
706
 
 
707
    }
 
708
 
 
709
    if (obj)
 
710
        xmlXPathFreeObject(obj);
 
711
 
 
712
    val = (long)((char *)cur - (char *)doc);
 
713
    if (val >= 0) {
 
714
      sprintf((char *)str, "idp%ld", val);
 
715
    } else {
 
716
      sprintf((char *)str, "idm%ld", -val);
 
717
    }
700
718
    valuePush(ctxt, xmlXPathNewString(str));
701
719
}
702
720