- libxslt/functions.c libxslt/keys.c libxslt/transform.c:
authorDaniel Veillard <veillard@src.gnome.org>
Sat, 7 Apr 2001 15:42:23 +0000 (15:42 +0000)
committerDaniel Veillard <veillard@src.gnome.org>
Sat, 7 Apr 2001 15:42:23 +0000 (15:42 +0000)
  some checking against NULL pointers
daniel

ChangeLog
libxslt/functions.c
libxslt/keys.c
libxslt/transform.c

index ba3c649..40c7dc1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Apr  8 11:42:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+       * libxslt/functions.c libxslt/keys.c libxslt/transform.c:
+         some checking against NULL pointers
+
 Mon Apr  2 17:00:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
 
        * configure.in tests/Makefile.am tests/XSLTMark/* tests/multiple:
index 9ef69cc..2ff7b94 100644 (file)
@@ -94,21 +94,23 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs){
        obj = valuePop(ctxt);
        ret = xmlXPathNewNodeSet(NULL);
 
-       for (i = 0; i < obj->nodesetval->nodeNr; i++) {
-           valuePush(ctxt,
-                     xmlXPathNewNodeSet(obj->nodesetval->nodeTab[i]));
-           xmlXPathStringFunction(ctxt, 1);
-           if (nargs == 2) {
-               valuePush(ctxt, xmlXPathObjectCopy(obj2));
-           } else {
+       if (obj->nodesetval) {
+           for (i = 0; i < obj->nodesetval->nodeNr; i++) {
                valuePush(ctxt,
                          xmlXPathNewNodeSet(obj->nodesetval->nodeTab[i]));
+               xmlXPathStringFunction(ctxt, 1);
+               if (nargs == 2) {
+                   valuePush(ctxt, xmlXPathObjectCopy(obj2));
+               } else {
+                   valuePush(ctxt,
+                             xmlXPathNewNodeSet(obj->nodesetval->nodeTab[i]));
+               }
+               xsltDocumentFunction(ctxt, 2);
+               newobj = valuePop(ctxt);
+               ret->nodesetval = xmlXPathNodeSetMerge(ret->nodesetval,
+                                                      newobj->nodesetval);
+               xmlXPathFreeObject(newobj);
            }
-           xsltDocumentFunction(ctxt, 2);
-           newobj = valuePop(ctxt);
-           ret->nodesetval = xmlXPathNodeSetMerge(ret->nodesetval,
-                                                  newobj->nodesetval);
-           xmlXPathFreeObject(newobj);
        }
 
        xmlXPathFreeObject(obj);
@@ -216,15 +218,17 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){
 
        ret = xmlXPathNewNodeSet(NULL);
 
-       for (i = 0; i < obj2->nodesetval->nodeNr; i++) {
-           valuePush(ctxt, xmlXPathObjectCopy(obj1));
-           valuePush(ctxt,
-                     xmlXPathNewNodeSet(obj2->nodesetval->nodeTab[i]));
-           xsltKeyFunction(ctxt, 2);
-           newobj = valuePop(ctxt);
-           ret->nodesetval = xmlXPathNodeSetMerge(ret->nodesetval,
-                                                  newobj->nodesetval);
-           xmlXPathFreeObject(newobj);
+       if (obj2->nodesetval != NULL) {
+           for (i = 0; i < obj2->nodesetval->nodeNr; i++) {
+               valuePush(ctxt, xmlXPathObjectCopy(obj1));
+               valuePush(ctxt,
+                         xmlXPathNewNodeSet(obj2->nodesetval->nodeTab[i]));
+               xsltKeyFunction(ctxt, 2);
+               newobj = valuePop(ctxt);
+               ret->nodesetval = xmlXPathNodeSetMerge(ret->nodesetval,
+                                                      newobj->nodesetval);
+               xmlXPathFreeObject(newobj);
+           }
        }
        valuePush(ctxt, ret);
     } else {
index ae92160..f7ce923 100644 (file)
@@ -326,9 +326,10 @@ xsltInitCtxtKey(xsltTransformContextPtr ctxt, xsltDocumentPtr doc,
        if (res->type == XPATH_NODESET) {
            nodelist = res->nodesetval;
 #ifdef DEBUG_KEYS
-           xsltGenericDebug(xsltGenericDebugContext,
-                "xsltInitCtxtKey: %s evaluates to %d nodes\n",
-                            pattern, nodelist->nodeNr);
+           if (nodelist != NULL)
+               xsltGenericDebug(xsltGenericDebugContext,
+                    "xsltInitCtxtKey: %s evaluates to %d nodes\n",
+                                pattern, nodelist->nodeNr);
 #endif
        } else {
 #ifdef DEBUG_KEYS
index 627f52f..acdeab0 100644 (file)
@@ -2039,6 +2039,9 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
                list = res->nodesetval;
                res->nodesetval = NULL;
             } else {
+               list == NULL;
+            }
+            if (list == NULL) {
 #ifdef DEBUG_PROCESS
                xsltGenericDebug(xsltGenericDebugContext,
                    "xsltApplyTemplates: select didn't evaluate to a node list\n");
@@ -2098,6 +2101,7 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
     }
 
 #ifdef DEBUG_PROCESS
+    if (list != NULL)
     xsltGenericDebug(xsltGenericDebugContext,
        "xsltApplyTemplates: list of %d nodes\n", list->nodeNr);
 #endif