@@ -15,7 +15,7 @@ typedef struct {
1515 FileData * files ;
1616 size_t fileCount ;
1717 int status ;
18- char * error_message ;
18+ char error_message [ 256 ] ;
1919} ExtractedArchive ;
2020
2121EMSCRIPTEN_KEEPALIVE
@@ -27,39 +27,37 @@ ExtractedArchive* extract_archive(uint8_t* inputData, size_t inputSize, size_t*
2727
2828 ExtractedArchive * result = (ExtractedArchive * )malloc (sizeof (ExtractedArchive ));
2929 if (!result ) {
30- result -> status = 0 ;
31- result -> error_message = strdup ("Memory allocation error for ExtractedArchive." );
3230 return NULL ;
3331 }
3432
3533 result -> files = NULL ;
3634 result -> fileCount = 0 ;
3735 result -> status = 1 ;
38- result -> error_message = NULL ;
36+ result -> error_message [ 0 ] = '\0' ;
3937
4038 archive = archive_read_new ();
4139 archive_read_support_filter_all (archive );
4240 archive_read_support_format_all (archive );
4341
4442 if (archive_read_open_memory (archive , inputData , inputSize ) != ARCHIVE_OK ) {
45- archive_read_free (archive );
4643 result -> status = 0 ;
47- result -> error_message = strdup (archive_error_string (archive ));
44+ snprintf (result -> error_message , sizeof (result -> error_message ), "%s" , archive_error_string (archive ));
45+ archive_read_free (archive );
4846 return result ;
4947 }
5048
5149 while (archive_read_next_header (archive , & entry ) == ARCHIVE_OK ) {
5250 const char * filename = archive_entry_pathname (entry );
5351 size_t entrySize = archive_entry_size (entry );
5452
55- files = realloc (files , sizeof (FileData ) * (files_count + 1 ));
53+
54+ files = realloc (files , sizeof (FileData ) * (files_count + 1 ));
5655 if (!files ) {
5756 archive_read_free (archive );
5857 result -> status = 0 ;
59- result -> error_message = strdup ( "Memory allocation error for FileData array ." );
58+ snprintf ( result -> error_message , sizeof ( result -> error_message ), "Memory allocation error for file data ." );
6059 return result ;
6160 }
62-
6361 files [files_count ].filename = strdup (filename );
6462 files [files_count ].data = malloc (entrySize );
6563 files [files_count ].data_size = entrySize ;
@@ -68,7 +66,7 @@ ExtractedArchive* extract_archive(uint8_t* inputData, size_t inputSize, size_t*
6866 free (files [files_count ].filename );
6967 archive_read_free (archive );
7068 result -> status = 0 ;
71- result -> error_message = strdup ( "Memory allocation error for file data." );
69+ snprintf ( result -> error_message , sizeof ( result -> error_message ), "Memory allocation error for file data." );
7270 return result ;
7371 }
7472
@@ -81,9 +79,9 @@ ExtractedArchive* extract_archive(uint8_t* inputData, size_t inputSize, size_t*
8179 free (files [i ].data );
8280 }
8381 free (files );
84- archive_read_free (archive );
8582 result -> status = 0 ;
86- result -> error_message = strdup (archive_error_string (archive ));
83+ snprintf (result -> error_message , sizeof (result -> error_message ), "%s" , archive_error_string (archive ));
84+ archive_read_free (archive );
8785 return result ;
8886 }
8987 bytesRead += ret ;
@@ -99,4 +97,15 @@ ExtractedArchive* extract_archive(uint8_t* inputData, size_t inputSize, size_t*
9997}
10098
10199
102-
100+ EMSCRIPTEN_KEEPALIVE
101+ void free_extracted_archive (ExtractedArchive * archive ) {
102+ if (!archive ) {
103+ fprintf (stderr , "No archive\n" );
104+ }
105+ for (size_t i = 0 ; i < archive -> fileCount ; i ++ ) {
106+ free (archive -> files [i ].filename );
107+ free (archive -> files [i ].data );
108+ }
109+ free (archive -> files );
110+ free (archive );
111+ }
0 commit comments