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 }