File: pyewf_file.c
Function: pyewf_file_get_header_value
Error: ob_refcnt of return value is 1 too low
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