496 */
497 PyObject *pyewf_file_get_header_value(
498 pyewf_file_t *pyewf_file,
499 PyObject *arguments,
500 PyObject *keywords )
501 {
502 PyObject *string_object = NULL;
503 static char *keyword_list[] = { "identifier", NULL };
504 char *header_value_identifier = NULL;
505 char *header_value = NULL;
506 size_t header_value_size = 0;
507 int result = 0;
508
509 #if defined( HAVE_V2_API )
510 size_t header_value_identifier_length = 0;
511 #endif
512
513 if( PyArg_ParseTupleAndKeywords(
when PyArg_ParseTupleAndKeywords() succeeds
taking False path
514 arguments,
515 keywords,
516 "s",
517 keyword_list,
518 &header_value_identifier ) == 0 )
519 {
520 return( NULL );
521 }
522 #if !defined( HAVE_V2_API )
523 /* Make sure the header values are parsed
524 */
525 if( libewf_parse_header_values(
when considering range: 0 <= value <= 0x7fffffff
taking False path
526 pyewf_file->handle,
527 LIBEWF_DATE_FORMAT_CTIME ) == -1 )
528 {
529 return( PyErr_Format(
530 PyExc_IOError,
531 "libewf_parse_header_values failed to parse header values" ) );
532 }
533 #endif
534 #if defined( HAVE_V2_API )
535 header_value_identifier_length = narrow_string_length(
536 header_value_identifier );
537
538 result = libewf_handle_get_header_value_size(
539 pyewf_file->handle,
540 (uint8_t *) header_value_identifier,
541 header_value_identifier_length,
542 &header_value_size,
543 NULL );
544
545 if( result == -1 )
546 {
547 return( PyErr_Format(
548 PyExc_IOError,
549 "libewf_handle_get_header_value_size unable to retrieve header value size: %s",
550 header_value_identifier ) );
551 }
552 #else
553 result = libewf_get_header_value_size(
554 pyewf_file->handle,
555 header_value_identifier,
556 &header_value_size );
557
558 if( result == -1 )
when considering range: 0 <= value <= 0x7fffffff
taking False path
559 {
560 return( PyErr_Format(
561 PyExc_IOError,
562 "libewf_get_header_value_size unable to retrieve header value size: %s",
563 header_value_identifier ) );
564 }
565 #endif
566 /* Check if header value is present
567 */
568 else if( result == 0 )
when considering value == (int)0 from pyewf_file.c:553
taking True path
ob_refcnt is now refs: 0 + N where N >= 1
569 {
570 return( Py_None );
571 }
572 header_value = (char *) memory_allocate(
573 sizeof( char ) * header_value_size );
574
575 if( header_value == NULL )
576 {
577 PyErr_Format(
578 PyExc_MemoryError,
579 "Unable to create header value" );
580
581 return( NULL );
582 }
583 #if defined( HAVE_V2_API )
584 result = libewf_handle_get_header_value(
585 pyewf_file->handle,
586 (uint8_t *) header_value_identifier,
587 header_value_identifier_length,
588 (uint8_t *) header_value,
589 header_value_size,
590 NULL );
591
592 if( result == -1 )
593 {
594 memory_free(
595 header_value );
596
597 return( PyErr_Format(
598 PyExc_IOError,
599 "libewf_handle_get_header_value_size unable to retrieve header value: %s",
600 header_value_identifier ) );
601 }
602 #else
603 result = libewf_get_header_value(
604 pyewf_file->handle,
605 header_value_identifier,
606 header_value,
607 header_value_size );
608
609 if( result == -1 )
610 {
611 memory_free(
612 header_value );
613
614 return( PyErr_Format(
615 PyExc_IOError,
616 "libewf_get_header_value unable to retrieve header value: %s",
617 header_value_identifier ) );
618 }
619 #endif
620 /* Check if header value is present
621 */
622 else if( result == 0 )
623 {
624 memory_free(
625 header_value );
626
627 return( Py_None );
628 }
629 string_object = PyString_FromString(
630 header_value );
631
632 memory_free(
633 header_value );
634
635 return( string_object );
636 }
ob_refcnt of return value is 1 too low
was expecting final ob_refcnt to be N + 1 (for some unknown N)
due to object being referenced by: return value
but final ob_refcnt is N + 0
consider using "Py_RETURN_NONE;"
found 4 similar trace(s) to this