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 }