@@ -672,21 +672,19 @@ ef_read(zip_t *za, zip_uint64_t idx, struct entry *e) {
672672
673673 e -> n_extra_fields = (zip_uint16_t )(n_local + n_central );
674674
675- if ((e -> extra_fields = (struct ef * )malloc (sizeof (e -> extra_fields [0 ]) * e -> n_extra_fields )) == NULL )
676- return -1 ;
675+ if ((e -> extra_fields = (struct ef * )malloc (sizeof (e -> extra_fields [0 ]) * e -> n_extra_fields )) == NULL ) {
676+ fprintf (stderr , "%s: malloc failure\n" , progname );
677+ exit (1 );
678+ }
677679
678680 for (i = 0 ; i < n_local ; i ++ ) {
679681 e -> extra_fields [i ].name = e -> name ;
680682 e -> extra_fields [i ].data = zip_file_extra_field_get (za , idx , i , & e -> extra_fields [i ].id , & e -> extra_fields [i ].size , ZIP_FL_LOCAL );
681- if (e -> extra_fields [i ].data == NULL )
682- return -1 ;
683683 e -> extra_fields [i ].flags = ZIP_FL_LOCAL ;
684684 }
685685 for (; i < e -> n_extra_fields ; i ++ ) {
686686 e -> extra_fields [i ].name = e -> name ;
687687 e -> extra_fields [i ].data = zip_file_extra_field_get (za , idx , (zip_uint16_t )(i - n_local ), & e -> extra_fields [i ].id , & e -> extra_fields [i ].size , ZIP_FL_CENTRAL );
688- if (e -> extra_fields [i ].data == NULL )
689- return -1 ;
690688 e -> extra_fields [i ].flags = ZIP_FL_CENTRAL ;
691689 }
692690
@@ -723,6 +721,8 @@ ef_order(const void *ap, const void *bp) {
723721 return a -> id - b -> id ;
724722 if (a -> size != b -> size )
725723 return a -> size - b -> size ;
724+ if (a -> data == NULL || b -> data == NULL )
725+ return a -> data == b -> data ? 0 : (a -> data == NULL ? -1 : 1 );
726726 return memcmp (a -> data , b -> data , a -> size );
727727}
728728
0 commit comments