File: ./types.c
Function: libxml_xmlXPathObjectPtrWrap
Error: calling PyList_SetItem with NULL as argument 1 (ret) at ./types.c:407
352 PyObject *
353 libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
354 {
355     PyObject *ret;
356 
357 #ifdef DEBUG
358     printf("libxml_xmlXPathObjectPtrWrap: ctxt = %p\n", obj);
359 #endif
360     if (obj == NULL) {
when taking False path
361         Py_INCREF(Py_None);
362         return (Py_None);
363     }
364     switch (obj->type) {
when treating unknown struct xmlXPathObject * from ./types.c:353 as non-NULL
when following case 1
365         case XPATH_XSLT_TREE: {
366             if ((obj->nodesetval == NULL) ||
367 		(obj->nodesetval->nodeNr == 0) ||
368 		(obj->nodesetval->nodeTab == NULL)) {
369                 ret = PyList_New(0);
370 	    } else {
371 		int i, len = 0;
372 		xmlNodePtr node;
373 
374 		node = obj->nodesetval->nodeTab[0]->children;
375 		while (node != NULL) {
376 		    len++;
377 		    node = node->next;
378 		}
379 		ret = PyList_New(len);
380 		node = obj->nodesetval->nodeTab[0]->children;
381 		for (i = 0;i < len;i++) {
382                     PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
383 		    node = node->next;
384 		}
385 	    }
386 	    /*
387 	     * Return now, do not free the object passed down
388 	     */
389 	    return (ret);
390 	}
391         case XPATH_NODESET:
392             if ((obj->nodesetval == NULL)
when treating unknown struct xmlNodeSet * from ./types.c:392 as non-NULL
taking False path
393                 || (obj->nodesetval->nodeNr == 0)) {
when treating unknown struct xmlNodeSet * from ./types.c:393 as non-NULL
when considering range: -0x80000000 <= value <= -1
taking False path
394                 ret = PyList_New(0);
395 	    } else {
396                 int i;
397                 xmlNodePtr node;
398 
399                 ret = PyList_New(obj->nodesetval->nodeNr);
when treating unknown struct xmlNodeSet * from ./types.c:399 as non-NULL
when PyList_New() fails
400                 for (i = 0; i < obj->nodesetval->nodeNr; i++) {
when treating unknown struct xmlNodeSet * from ./types.c:400 as non-NULL
when considering range: 1 <= value <= 0x7fffffff
taking True path
401                     node = obj->nodesetval->nodeTab[i];
when treating unknown struct xmlNodeSet * from ./types.c:401 as non-NULL
when treating unknown struct xmlNode * * from ./types.c:401 as non-NULL
402                     if (node->type == XML_NAMESPACE_DECL) {
when treating unknown struct xmlNode * from ./types.c:401 as non-NULL
when taking True path
403 		        PyObject *ns = 
when PyCObject_FromVoidPtrAndDesc() succeeds
404 			    PyCObject_FromVoidPtrAndDesc((void *) node,
405                                      (char *) "xmlNsPtr",
406 				     libxml_xmlXPathDestructNsNode);
407 			PyList_SetItem(ret, i, ns);
calling PyList_SetItem with NULL as argument 1 (ret) at ./types.c:407
PyList_SetItem() invokes Py_TYPE() on the pointer via the PyList_Check() macro, thus accessing (NULL)->ob_type
found 2 similar trace(s) to this
408 			/* make sure the xmlNsPtr is not destroyed now */
409 			obj->nodesetval->nodeTab[i] = NULL;
410 		    } else {
411 			PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
412 		    }
413                 }
414             }
415             break;
416         case XPATH_BOOLEAN:
417             ret = PyInt_FromLong((long) obj->boolval);
418             break;
419         case XPATH_NUMBER:
420             ret = PyFloat_FromDouble(obj->floatval);
421             break;
422         case XPATH_STRING:
423             ret = PyString_FromString((char *) obj->stringval);
424             break;
425         case XPATH_POINT:
426         {
427             PyObject *node;
428             PyObject *indexIntoNode;
429             PyObject *tuple;
430 
431             node = libxml_xmlNodePtrWrap(obj->user);
432             indexIntoNode = PyInt_FromLong((long) obj->index);
433 
434             tuple = PyTuple_New(2);
435             PyTuple_SetItem(tuple, 0, node);
436             PyTuple_SetItem(tuple, 1, indexIntoNode);
437 
438             ret = tuple;
439             break;
440         }
441         case XPATH_RANGE:
442         {
443             unsigned short bCollapsedRange;
444 
445             bCollapsedRange = ( (obj->user2 == NULL) ||
446 		                ((obj->user2 == obj->user) && (obj->index == obj->index2)) );
447             if ( bCollapsedRange ) {
448                 PyObject *node;
449                 PyObject *indexIntoNode;
450                 PyObject *tuple;
451                 PyObject *list;
452 
453                 list = PyList_New(1);
454 
455                 node = libxml_xmlNodePtrWrap(obj->user);
456                 indexIntoNode = PyInt_FromLong((long) obj->index);
457 
458                 tuple = PyTuple_New(2);
459                 PyTuple_SetItem(tuple, 0, node);
460                 PyTuple_SetItem(tuple, 1, indexIntoNode);
461 
462                 PyList_SetItem(list, 0, tuple);
463 
464                 ret = list;
465             } else {
466                 PyObject *node;
467                 PyObject *indexIntoNode;
468                 PyObject *tuple;
469                 PyObject *list;
470 
471                 list = PyList_New(2);
472 
473                 node = libxml_xmlNodePtrWrap(obj->user);
474                 indexIntoNode = PyInt_FromLong((long) obj->index);
475 
476                 tuple = PyTuple_New(2);
477                 PyTuple_SetItem(tuple, 0, node);
478                 PyTuple_SetItem(tuple, 1, indexIntoNode);
479 
480                 PyList_SetItem(list, 0, tuple);
481 
482                 node = libxml_xmlNodePtrWrap(obj->user2);
483                 indexIntoNode = PyInt_FromLong((long) obj->index2);
484 
485                 tuple = PyTuple_New(2);
486                 PyTuple_SetItem(tuple, 0, node);
487                 PyTuple_SetItem(tuple, 1, indexIntoNode);
488 
489                 PyList_SetItem(list, 1, tuple);
490 
491                 ret = list;
492             }
493             break;
494         }
495         case XPATH_LOCATIONSET:
496         {
497             xmlLocationSetPtr set;
498 
499             set = obj->user;
500             if ( set && set->locNr > 0 ) {
501                 int i;
502                 PyObject *list;
503 
504                 list = PyList_New(set->locNr);
505 
506                 for (i=0; i<set->locNr; i++) {
507                     xmlXPathObjectPtr setobj;
508                     PyObject *pyobj;
509 
510                     setobj = set->locTab[i]; /*xmlXPathObjectPtr setobj*/
511 
512                     pyobj = libxml_xmlXPathObjectPtrWrap(setobj);
513                     /* xmlXPathFreeObject(setobj) is called */
514                     set->locTab[i] = NULL;
515 
516                     PyList_SetItem(list, i, pyobj);
517                 }
518                 set->locNr = 0;
519                 ret = list;
520             } else {
521                 Py_INCREF(Py_None);
522                 ret = Py_None;
523             }
524             break;
525         }
526         default:
527 #ifdef DEBUG
528             printf("Unable to convert XPath object type %d\n", obj->type);
529 #endif
530             Py_INCREF(Py_None);
531             ret = Py_None;
532     }
533     xmlXPathFreeObject(obj);
534     return (ret);
535 }

File: ./types.c
Function: libxml_xmlXPathObjectPtrWrap
Error: calling PyList_SetItem with NULL as argument 1 (ret) at ./types.c:411
352 PyObject *
353 libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
354 {
355     PyObject *ret;
356 
357 #ifdef DEBUG
358     printf("libxml_xmlXPathObjectPtrWrap: ctxt = %p\n", obj);
359 #endif
360     if (obj == NULL) {
when taking False path
361         Py_INCREF(Py_None);
362         return (Py_None);
363     }
364     switch (obj->type) {
when treating unknown struct xmlXPathObject * from ./types.c:353 as non-NULL
when following case 1
365         case XPATH_XSLT_TREE: {
366             if ((obj->nodesetval == NULL) ||
367 		(obj->nodesetval->nodeNr == 0) ||
368 		(obj->nodesetval->nodeTab == NULL)) {
369                 ret = PyList_New(0);
370 	    } else {
371 		int i, len = 0;
372 		xmlNodePtr node;
373 
374 		node = obj->nodesetval->nodeTab[0]->children;
375 		while (node != NULL) {
376 		    len++;
377 		    node = node->next;
378 		}
379 		ret = PyList_New(len);
380 		node = obj->nodesetval->nodeTab[0]->children;
381 		for (i = 0;i < len;i++) {
382                     PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
383 		    node = node->next;
384 		}
385 	    }
386 	    /*
387 	     * Return now, do not free the object passed down
388 	     */
389 	    return (ret);
390 	}
391         case XPATH_NODESET:
392             if ((obj->nodesetval == NULL)
when treating unknown struct xmlNodeSet * from ./types.c:392 as non-NULL
taking False path
393                 || (obj->nodesetval->nodeNr == 0)) {
when treating unknown struct xmlNodeSet * from ./types.c:393 as non-NULL
when considering range: -0x80000000 <= value <= -1
taking False path
394                 ret = PyList_New(0);
395 	    } else {
396                 int i;
397                 xmlNodePtr node;
398 
399                 ret = PyList_New(obj->nodesetval->nodeNr);
when treating unknown struct xmlNodeSet * from ./types.c:399 as non-NULL
when PyList_New() fails
400                 for (i = 0; i < obj->nodesetval->nodeNr; i++) {
when treating unknown struct xmlNodeSet * from ./types.c:400 as non-NULL
when considering range: 1 <= value <= 0x7fffffff
taking True path
401                     node = obj->nodesetval->nodeTab[i];
when treating unknown struct xmlNodeSet * from ./types.c:401 as non-NULL
when treating unknown struct xmlNode * * from ./types.c:401 as non-NULL
402                     if (node->type == XML_NAMESPACE_DECL) {
when treating unknown struct xmlNode * from ./types.c:401 as non-NULL
when taking False path
403 		        PyObject *ns = 
404 			    PyCObject_FromVoidPtrAndDesc((void *) node,
405                                      (char *) "xmlNsPtr",
406 				     libxml_xmlXPathDestructNsNode);
407 			PyList_SetItem(ret, i, ns);
408 			/* make sure the xmlNsPtr is not destroyed now */
409 			obj->nodesetval->nodeTab[i] = NULL;
410 		    } else {
411 			PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
when libxml_xmlNodePtrWrap() succeeds
calling PyList_SetItem with NULL as argument 1 (ret) at ./types.c:411
PyList_SetItem() invokes Py_TYPE() on the pointer via the PyList_Check() macro, thus accessing (NULL)->ob_type
found 1 similar trace(s) to this
412 		    }
413                 }
414             }
415             break;
416         case XPATH_BOOLEAN:
417             ret = PyInt_FromLong((long) obj->boolval);
418             break;
419         case XPATH_NUMBER:
420             ret = PyFloat_FromDouble(obj->floatval);
421             break;
422         case XPATH_STRING:
423             ret = PyString_FromString((char *) obj->stringval);
424             break;
425         case XPATH_POINT:
426         {
427             PyObject *node;
428             PyObject *indexIntoNode;
429             PyObject *tuple;
430 
431             node = libxml_xmlNodePtrWrap(obj->user);
432             indexIntoNode = PyInt_FromLong((long) obj->index);
433 
434             tuple = PyTuple_New(2);
435             PyTuple_SetItem(tuple, 0, node);
436             PyTuple_SetItem(tuple, 1, indexIntoNode);
437 
438             ret = tuple;
439             break;
440         }
441         case XPATH_RANGE:
442         {
443             unsigned short bCollapsedRange;
444 
445             bCollapsedRange = ( (obj->user2 == NULL) ||
446 		                ((obj->user2 == obj->user) && (obj->index == obj->index2)) );
447             if ( bCollapsedRange ) {
448                 PyObject *node;
449                 PyObject *indexIntoNode;
450                 PyObject *tuple;
451                 PyObject *list;
452 
453                 list = PyList_New(1);
454 
455                 node = libxml_xmlNodePtrWrap(obj->user);
456                 indexIntoNode = PyInt_FromLong((long) obj->index);
457 
458                 tuple = PyTuple_New(2);
459                 PyTuple_SetItem(tuple, 0, node);
460                 PyTuple_SetItem(tuple, 1, indexIntoNode);
461 
462                 PyList_SetItem(list, 0, tuple);
463 
464                 ret = list;
465             } else {
466                 PyObject *node;
467                 PyObject *indexIntoNode;
468                 PyObject *tuple;
469                 PyObject *list;
470 
471                 list = PyList_New(2);
472 
473                 node = libxml_xmlNodePtrWrap(obj->user);
474                 indexIntoNode = PyInt_FromLong((long) obj->index);
475 
476                 tuple = PyTuple_New(2);
477                 PyTuple_SetItem(tuple, 0, node);
478                 PyTuple_SetItem(tuple, 1, indexIntoNode);
479 
480                 PyList_SetItem(list, 0, tuple);
481 
482                 node = libxml_xmlNodePtrWrap(obj->user2);
483                 indexIntoNode = PyInt_FromLong((long) obj->index2);
484 
485                 tuple = PyTuple_New(2);
486                 PyTuple_SetItem(tuple, 0, node);
487                 PyTuple_SetItem(tuple, 1, indexIntoNode);
488 
489                 PyList_SetItem(list, 1, tuple);
490 
491                 ret = list;
492             }
493             break;
494         }
495         case XPATH_LOCATIONSET:
496         {
497             xmlLocationSetPtr set;
498 
499             set = obj->user;
500             if ( set && set->locNr > 0 ) {
501                 int i;
502                 PyObject *list;
503 
504                 list = PyList_New(set->locNr);
505 
506                 for (i=0; i<set->locNr; i++) {
507                     xmlXPathObjectPtr setobj;
508                     PyObject *pyobj;
509 
510                     setobj = set->locTab[i]; /*xmlXPathObjectPtr setobj*/
511 
512                     pyobj = libxml_xmlXPathObjectPtrWrap(setobj);
513                     /* xmlXPathFreeObject(setobj) is called */
514                     set->locTab[i] = NULL;
515 
516                     PyList_SetItem(list, i, pyobj);
517                 }
518                 set->locNr = 0;
519                 ret = list;
520             } else {
521                 Py_INCREF(Py_None);
522                 ret = Py_None;
523             }
524             break;
525         }
526         default:
527 #ifdef DEBUG
528             printf("Unable to convert XPath object type %d\n", obj->type);
529 #endif
530             Py_INCREF(Py_None);
531             ret = Py_None;
532     }
533     xmlXPathFreeObject(obj);
534     return (ret);
535 }