:: commit c355396f567d0cf197358b763b3966c8ef2ccf1e

Kamila Szewczyk <kspalaiologos@gmail.com> — 2022-05-11 14:06

parents: 2aa4527b78

small block optimisation check

diff --git a/src/libbz3.c b/src/libbz3.c
index b66096d..0f63c8a 100644
--- a/src/libbz3.c
+++ b/src/libbz3.c
@@ -186,16 +186,21 @@ PUBLIC_API s32 bz3_decode_block(struct bz3_state * state, u8 * buffer, s32 data_
     u32 crc32 = read_neutral_s32(buffer);
     s32 bwt_idx = read_neutral_s32(buffer + 4);
 
+    if(data_size > state->block_size + state->block_size / 50 + 16 || data_size < 0) {
+        state->last_error = BZ3_ERR_MALFORMED_HEADER;
+        return -1;
+    }
+
     if (bwt_idx == -1) {
+        if(data_size > 64) {
+            state->last_error = BZ3_ERR_MALFORMED_HEADER;
+            return -1;
+        }
+
         memmove(buffer, buffer + 8, data_size - 8);
         return data_size - 8;
     }
 
-    if (orig_size > state->block_size) {
-        state->last_error = BZ3_ERR_DATA_TOO_BIG;
-        return -1;
-    }
-
     s8 model = buffer[8];
     s32 lzp_size = -1, rle_size, p = 0;
 
diff --git a/src/main.c b/src/main.c
index bc8c28b..d67354a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -142,9 +142,11 @@ int main(int argc, char * argv[]) {
             output = regular_file;
             if (!force_stdstreams && output == NULL && input != NULL) {
                 // strip the bz3 extension
-                output = malloc(strlen(input) - 4);
-                strncpy(output, input, strlen(input) - 4);
-                output[strlen(input) - 4] = '\0';
+                if(strlen(input) > 4 && !strcmp(input + strlen(input) - 4, ".bz3")) {
+                    output = malloc(strlen(input));
+                    strncpy(output, input, strlen(input) - 4);
+                    output[strlen(input) - 4] = '\0';
+                }
             }
         }
     } else {
tab: 248 wrap: offon