File: pyewf_file.c
Function: pyewf_file_get_header_values
Error: ob_refcnt of '*dictionary_object' is 1 too high
640  */
641 PyObject *pyewf_file_get_header_values(
642            pyewf_file_t *pyewf_file )
643 {
644 	PyObject *dictionary_object           = NULL;
645 	PyObject *string_object               = NULL;
646 	char *header_value                    = NULL;
647 	char *header_value_identifier         = NULL;
648 	uint32_t amount_of_header_values      = 0;
649 	uint32_t header_value_iterator        = 0;
650 	size_t header_value_size              = 0;
651 	size_t header_value_identifier_size   = 0;
652 
653 #if defined( HAVE_V2_API )
654 	size_t header_value_identifier_length = 0;
655 #endif
656 
657 #if !defined( HAVE_V2_API )
658 	/* Make sure the header values are parsed
659 	 */
660 	if( libewf_parse_header_values(
when considering range: -0x80000000 <= value <= -2
taking False path
661 	     pyewf_file->handle,
662 	     LIBEWF_DATE_FORMAT_CTIME ) == -1 )
663 	{
664 		return( PyErr_Format(
665 		         PyExc_IOError,
666 		         "libewf_parse_header_values failed to parse header values" ) );
667 	}
668 #endif
669 #if defined( HAVE_V2_API )
670 	if( libewf_handle_get_amount_of_header_values(
671 	     pyewf_file->handle,
672 	     &amount_of_header_values,
673 	     NULL ) != 1 )
674 	{
675 		return( PyErr_Format(
676 		         PyExc_IOError,
677 		         "libewf_handle_get_amount_of_header_values failed to retrieve amount of header values" ) );
678 	}
679 #else
680 	if( libewf_get_amount_of_header_values(
when considering value == (int)1 from pyewf_file.c:680
taking False path
681 	     pyewf_file->handle,
682 	     &amount_of_header_values ) != 1 )
683 	{
684 		return( PyErr_Format(
685 		         PyExc_IOError,
686 		         "libewf_get_amount_of_header_values failed to retrieve amount of header values" ) );
687 	}
688 #endif
689 	dictionary_object = PyDict_New();
when PyDict_New() succeeds
PyDictObject allocated at: 	dictionary_object = PyDict_New();
ob_refcnt is now refs: 1 + N where N >= 0
690 
691 	for( header_value_iterator = 0; header_value_iterator < amount_of_header_values; header_value_iterator++ )
when taking True path
692 	{
693 #if defined( HAVE_V2_API )
694 		if( libewf_handle_get_header_value_identifier_size(
695 		     pyewf_file->handle,
696 		     header_value_iterator,
697 		     &header_value_identifier_size,
698 		     NULL ) != 1 )
699 		{
700 			return( PyErr_Format(
701 				 PyExc_IOError,
702 				 "libewf_handle_get_header_value_identifier_size unable to retrieve header value identifier size: %d",
703 				 header_value_iterator ) );
704 		}
705 #else
706 		if( libewf_get_header_value_identifier_size(
when considering range: -0x80000000 <= value <= 0
taking True path
707 		     pyewf_file->handle,
708 		     header_value_iterator,
709 		     &header_value_identifier_size ) != 1 )
710 		{
711 			return( PyErr_Format(
PyErr_Format()
712 				 PyExc_IOError,
713 				 "libewf_get_header_value_identifier_size unable to retrieve header value identifier size: %d",
714 				 header_value_iterator ) );
715 		}
716 #endif
717 		header_value_identifier = (char *) memory_allocate(
718 		                                    sizeof( char ) * header_value_identifier_size );
719 
720 		if( header_value_identifier == NULL )
721 		{
722 			PyErr_Format(
723 			 PyExc_MemoryError,
724 			 "Unable to create header value identifier" );
725 
726 			return( NULL );
727 		}
728 #if defined( HAVE_V2_API )
729 		if( libewf_handle_get_header_value_identifier(
730 		     pyewf_file->handle,
731 		     header_value_iterator,
732 		     (uint8_t *) header_value_identifier,
733 		     header_value_identifier_size,
734 		     NULL ) != 1 )
735 		{
736 			memory_free(
737 			 header_value_identifier );
738 
739 			return( PyErr_Format(
740 				 PyExc_IOError,
741 				 "libewf_handle_get_header_value_identifier unable to retrieve header value identifier: %d",
742 				 header_value_iterator ) );
743 		}
744 #else
745 		if( libewf_get_header_value_identifier(
746 		     pyewf_file->handle,
747 		     header_value_iterator,
748 		     header_value_identifier,
749 		     header_value_identifier_size ) != 1 )
750 		{
751 			memory_free(
752 			 header_value_identifier );
753 
754 			return( PyErr_Format(
755 				 PyExc_IOError,
756 				 "libewf_get_header_value_identifier unable to retrieve header value identifier: %d",
757 				 header_value_iterator ) );
758 		}
759 #endif
760 #if defined( HAVE_V2_API )
761 		header_value_identifier_length = narrow_string_length(
762 						  header_value_identifier );
763 
764 		if( libewf_handle_get_header_value_size(
765 		     pyewf_file->handle,
766 		     (uint8_t *) header_value_identifier,
767 		     header_value_identifier_length,
768 		     &header_value_size,
769 		     NULL ) != 1 )
770 		{
771 			memory_free(
772 			 header_value_identifier );
773 
774 			return( PyErr_Format(
775 				 PyExc_IOError,
776 				 "libewf_handle_get_header_value_size unable to retrieve header value size: %s",
777 				 header_value_identifier ) );
778 		}
779 #else
780 		if( libewf_get_header_value_size(
781 		     pyewf_file->handle,
782 		     header_value_identifier,
783 		     &header_value_size ) != 1 )
784 		{
785 			memory_free(
786 			 header_value_identifier );
787 
788 			return( PyErr_Format(
789 				 PyExc_IOError,
790 				 "libewf_get_header_value_size unable to retrieve header value size: %s",
791 				 header_value_identifier ) );
792 		}
793 #endif
794 		header_value = (char *) memory_allocate(
795 		                         sizeof( char ) * header_value_size );
796 
797 		if( header_value == NULL )
798 		{
799 			memory_free(
800 			 header_value_identifier );
801 
802 			PyErr_Format(
803 			 PyExc_MemoryError,
804 			 "Unable to create header value" );
805 
806 			return( NULL );
807 		}
808 		/* Ignore emtpy header values
809 		 */
810 #if defined( HAVE_V2_API )
811 		if( libewf_handle_get_header_value(
812 		     pyewf_file->handle,
813 		     (uint8_t *) header_value_identifier,
814 		     header_value_identifier_length,
815 		     (uint8_t *) header_value,
816 		     header_value_size,
817 		     NULL ) == 1 )
818 #else
819 		if( libewf_get_header_value(
820 		     pyewf_file->handle,
821 		     header_value_identifier,
822 		     header_value,
823 		     header_value_size ) == 1 )
824 #endif
825 		{
826 			string_object = PyString_FromFormat(
827 			                 header_value );
828 
829 			PyDict_SetItemString(
830 			 dictionary_object,
831 			 header_value_identifier,
832 			 string_object );
833 
834 			Py_DECREF(
835 			 string_object );
836 		}
837 		memory_free(
838 		 header_value_identifier );
839 		memory_free(
840 		 header_value );
841 	}
842 	return( dictionary_object );
843 }
ob_refcnt of '*dictionary_object' is 1 too high
was expecting final ob_refcnt to be N + 0 (for some unknown N)
but final ob_refcnt is N + 1
found 7 similar trace(s) to this

File: pyewf_file.c
Function: pyewf_file_get_header_values
Error: calling PyDict_SetItemString with NULL as argument 3 (string_object) at pyewf_file.c:829
640  */
641 PyObject *pyewf_file_get_header_values(
642            pyewf_file_t *pyewf_file )
643 {
644 	PyObject *dictionary_object           = NULL;
645 	PyObject *string_object               = NULL;
646 	char *header_value                    = NULL;
647 	char *header_value_identifier         = NULL;
648 	uint32_t amount_of_header_values      = 0;
649 	uint32_t header_value_iterator        = 0;
650 	size_t header_value_size              = 0;
651 	size_t header_value_identifier_size   = 0;
652 
653 #if defined( HAVE_V2_API )
654 	size_t header_value_identifier_length = 0;
655 #endif
656 
657 #if !defined( HAVE_V2_API )
658 	/* Make sure the header values are parsed
659 	 */
660 	if( libewf_parse_header_values(
when considering range: -0x80000000 <= value <= -2
taking False path
661 	     pyewf_file->handle,
662 	     LIBEWF_DATE_FORMAT_CTIME ) == -1 )
663 	{
664 		return( PyErr_Format(
665 		         PyExc_IOError,
666 		         "libewf_parse_header_values failed to parse header values" ) );
667 	}
668 #endif
669 #if defined( HAVE_V2_API )
670 	if( libewf_handle_get_amount_of_header_values(
671 	     pyewf_file->handle,
672 	     &amount_of_header_values,
673 	     NULL ) != 1 )
674 	{
675 		return( PyErr_Format(
676 		         PyExc_IOError,
677 		         "libewf_handle_get_amount_of_header_values failed to retrieve amount of header values" ) );
678 	}
679 #else
680 	if( libewf_get_amount_of_header_values(
when considering value == (int)1 from pyewf_file.c:680
taking False path
681 	     pyewf_file->handle,
682 	     &amount_of_header_values ) != 1 )
683 	{
684 		return( PyErr_Format(
685 		         PyExc_IOError,
686 		         "libewf_get_amount_of_header_values failed to retrieve amount of header values" ) );
687 	}
688 #endif
689 	dictionary_object = PyDict_New();
when PyDict_New() succeeds
690 
691 	for( header_value_iterator = 0; header_value_iterator < amount_of_header_values; header_value_iterator++ )
when taking True path
692 	{
693 #if defined( HAVE_V2_API )
694 		if( libewf_handle_get_header_value_identifier_size(
695 		     pyewf_file->handle,
696 		     header_value_iterator,
697 		     &header_value_identifier_size,
698 		     NULL ) != 1 )
699 		{
700 			return( PyErr_Format(
701 				 PyExc_IOError,
702 				 "libewf_handle_get_header_value_identifier_size unable to retrieve header value identifier size: %d",
703 				 header_value_iterator ) );
704 		}
705 #else
706 		if( libewf_get_header_value_identifier_size(
when considering value == (int)1 from pyewf_file.c:706
taking False path
707 		     pyewf_file->handle,
708 		     header_value_iterator,
709 		     &header_value_identifier_size ) != 1 )
710 		{
711 			return( PyErr_Format(
712 				 PyExc_IOError,
713 				 "libewf_get_header_value_identifier_size unable to retrieve header value identifier size: %d",
714 				 header_value_iterator ) );
715 		}
716 #endif
717 		header_value_identifier = (char *) memory_allocate(
718 		                                    sizeof( char ) * header_value_identifier_size );
719 
720 		if( header_value_identifier == NULL )
when treating unknown void * from pyewf_file.c:717 as non-NULL
taking False path
721 		{
722 			PyErr_Format(
723 			 PyExc_MemoryError,
724 			 "Unable to create header value identifier" );
725 
726 			return( NULL );
727 		}
728 #if defined( HAVE_V2_API )
729 		if( libewf_handle_get_header_value_identifier(
730 		     pyewf_file->handle,
731 		     header_value_iterator,
732 		     (uint8_t *) header_value_identifier,
733 		     header_value_identifier_size,
734 		     NULL ) != 1 )
735 		{
736 			memory_free(
737 			 header_value_identifier );
738 
739 			return( PyErr_Format(
740 				 PyExc_IOError,
741 				 "libewf_handle_get_header_value_identifier unable to retrieve header value identifier: %d",
742 				 header_value_iterator ) );
743 		}
744 #else
745 		if( libewf_get_header_value_identifier(
when considering value == (int)1 from pyewf_file.c:745
taking False path
746 		     pyewf_file->handle,
747 		     header_value_iterator,
748 		     header_value_identifier,
749 		     header_value_identifier_size ) != 1 )
750 		{
751 			memory_free(
752 			 header_value_identifier );
753 
754 			return( PyErr_Format(
755 				 PyExc_IOError,
756 				 "libewf_get_header_value_identifier unable to retrieve header value identifier: %d",
757 				 header_value_iterator ) );
758 		}
759 #endif
760 #if defined( HAVE_V2_API )
761 		header_value_identifier_length = narrow_string_length(
762 						  header_value_identifier );
763 
764 		if( libewf_handle_get_header_value_size(
765 		     pyewf_file->handle,
766 		     (uint8_t *) header_value_identifier,
767 		     header_value_identifier_length,
768 		     &header_value_size,
769 		     NULL ) != 1 )
770 		{
771 			memory_free(
772 			 header_value_identifier );
773 
774 			return( PyErr_Format(
775 				 PyExc_IOError,
776 				 "libewf_handle_get_header_value_size unable to retrieve header value size: %s",
777 				 header_value_identifier ) );
778 		}
779 #else
780 		if( libewf_get_header_value_size(
when considering value == (int)1 from pyewf_file.c:780
taking False path
781 		     pyewf_file->handle,
782 		     header_value_identifier,
783 		     &header_value_size ) != 1 )
784 		{
785 			memory_free(
786 			 header_value_identifier );
787 
788 			return( PyErr_Format(
789 				 PyExc_IOError,
790 				 "libewf_get_header_value_size unable to retrieve header value size: %s",
791 				 header_value_identifier ) );
792 		}
793 #endif
794 		header_value = (char *) memory_allocate(
795 		                         sizeof( char ) * header_value_size );
796 
797 		if( header_value == NULL )
when treating unknown void * from pyewf_file.c:794 as non-NULL
taking False path
798 		{
799 			memory_free(
800 			 header_value_identifier );
801 
802 			PyErr_Format(
803 			 PyExc_MemoryError,
804 			 "Unable to create header value" );
805 
806 			return( NULL );
807 		}
808 		/* Ignore emtpy header values
809 		 */
810 #if defined( HAVE_V2_API )
811 		if( libewf_handle_get_header_value(
812 		     pyewf_file->handle,
813 		     (uint8_t *) header_value_identifier,
814 		     header_value_identifier_length,
815 		     (uint8_t *) header_value,
816 		     header_value_size,
817 		     NULL ) == 1 )
818 #else
819 		if( libewf_get_header_value(
when considering value == (int)1 from pyewf_file.c:819
taking True path
820 		     pyewf_file->handle,
821 		     header_value_identifier,
822 		     header_value,
823 		     header_value_size ) == 1 )
824 #endif
825 		{
826 			string_object = PyString_FromFormat(
when PyString_FromFormat() fails
827 			                 header_value );
828 
829 			PyDict_SetItemString(
calling PyDict_SetItemString with NULL as argument 3 (string_object) at pyewf_file.c:829
830 			 dictionary_object,
831 			 header_value_identifier,
832 			 string_object );
833 
834 			Py_DECREF(
835 			 string_object );
836 		}
837 		memory_free(
838 		 header_value_identifier );
839 		memory_free(
840 		 header_value );
841 	}
842 	return( dictionary_object );
843 }