Browse code

ARJ: Fix error handling copy-paste bugs

Fixes error handling issues in ARJ parser wherein FALSE is mistakenly
returned instead of a CL_E* error code, as the type is return type is
`int`, but in reality a cl_error_t enum value is expected.

Micah Snyder authored on 2020/08/22 13:20:13
Showing 1 changed files
... ...
@@ -894,7 +894,7 @@ static int arj_read_main_header(arj_metadata_t *metadata)
894 894
 
895 895
     filename_max_len = (header_size + sizeof(header_size)) - (metadata->offset - orig_offset);
896 896
     if (filename_max_len > header_size) {
897
-        cli_dbgmsg("UNARJ: Format error. First Header Size invalid");
897
+        cli_dbgmsg("UNARJ: Format error. First Header Size invalid\n");
898 898
         ret = FALSE;
899 899
         goto done;
900 900
     }
... ...
@@ -912,7 +912,7 @@ static int arj_read_main_header(arj_metadata_t *metadata)
912 912
 
913 913
     comment_max_len = (header_size + sizeof(header_size)) - (metadata->offset - orig_offset);
914 914
     if (comment_max_len > header_size) {
915
-        cli_dbgmsg("UNARJ: Format error. First Header Size invalid");
915
+        cli_dbgmsg("UNARJ: Format error. First Header Size invalid\n");
916 916
         ret = FALSE;
917 917
         goto done;
918 918
     }
... ...
@@ -1003,7 +1003,7 @@ static int arj_read_file_header(arj_metadata_t *metadata)
1003 1003
     }
1004 1004
     if ((header_size + sizeof(header_size)) > (metadata->map->real_len - metadata->offset)) {
1005 1005
         cli_dbgmsg("arj_read_file_header: invalid header_size: %u, exceeds length of file.\n", header_size);
1006
-        ret = FALSE;
1006
+        ret = CL_EFORMAT;
1007 1007
         goto done;
1008 1008
     }
1009 1009
     if (fmap_readn(metadata->map, &file_hdr, metadata->offset, 30) != 30) {
... ...
@@ -1039,16 +1039,21 @@ static int arj_read_file_header(arj_metadata_t *metadata)
1039 1039
 
1040 1040
     filename_max_len = (header_size + sizeof(header_size)) - (metadata->offset - orig_offset);
1041 1041
     if (filename_max_len > header_size) {
1042
-        cli_dbgmsg("UNARJ: Format error. First Header Size invalid");
1043
-        ret = FALSE;
1042
+        cli_dbgmsg("UNARJ: Format error. First Header Size invalid\n");
1043
+        ret = CL_EFORMAT;
1044 1044
         goto done;
1045 1045
     }
1046 1046
     if (filename_max_len > 0) {
1047
-        fnnorm   = cli_calloc(sizeof(unsigned char), filename_max_len + 1);
1048
-        filename = fmap_need_offstr(metadata->map, metadata->offset, filename_max_len + 1);
1049
-        if (!filename || !fnnorm) {
1047
+        fnnorm = cli_calloc(sizeof(unsigned char), filename_max_len + 1);
1048
+        if (!fnnorm) {
1050 1049
             cli_dbgmsg("UNARJ: Unable to allocate memory for filename\n");
1051
-            ret = FALSE;
1050
+            ret = CL_EMEM;
1051
+            goto done;
1052
+        }
1053
+        filename = fmap_need_offstr(metadata->map, metadata->offset, filename_max_len + 1);
1054
+        if (!filename) {
1055
+            cli_dbgmsg("UNARJ: Filename is out of file\n");
1056
+            ret = CL_EFORMAT;
1052 1057
             goto done;
1053 1058
         }
1054 1059
         filename_len = CLI_STRNLEN(filename, filename_max_len);
... ...
@@ -1057,16 +1062,21 @@ static int arj_read_file_header(arj_metadata_t *metadata)
1057 1057
 
1058 1058
     comment_max_len = (header_size + sizeof(header_size)) - (metadata->offset - orig_offset);
1059 1059
     if (comment_max_len > header_size) {
1060
-        cli_dbgmsg("UNARJ: Format error. First Header Size invalid");
1061
-        ret = FALSE;
1060
+        cli_dbgmsg("UNARJ: Format error. First Header Size invalid\n");
1061
+        ret = CL_EFORMAT;
1062 1062
         goto done;
1063 1063
     }
1064 1064
     if (comment_max_len > 0) {
1065 1065
         comnorm = cli_calloc(sizeof(unsigned char), comment_max_len + 1);
1066
-        comment = fmap_need_offstr(metadata->map, metadata->offset, comment_max_len + 1);
1067
-        if (!comment || !comnorm) {
1066
+        if (!comnorm) {
1068 1067
             cli_dbgmsg("UNARJ: Unable to allocate memory for comment\n");
1069
-            ret = FALSE;
1068
+            ret = CL_EMEM;
1069
+            goto done;
1070
+        }
1071
+        comment = fmap_need_offstr(metadata->map, metadata->offset, comment_max_len + 1);
1072
+        if (!comment) {
1073
+            cli_dbgmsg("UNARJ: comment is out of file\n");
1074
+            ret = CL_EFORMAT;
1070 1075
             goto done;
1071 1076
         }
1072 1077
         comment_len += CLI_STRNLEN(comment, comment_max_len);