:: commit 9708809c42cea2458e52ede8324713da52d41899

Kamila Szewczyk <kspalaiologos@gmail.com> — 2022-05-02 11:43

parents: 6f8c2672ea

rudimentary corruption detection

diff --git a/src/main.c b/src/main.c
index 729a931..a554d68 100644
--- a/src/main.c
+++ b/src/main.c
@@ -121,7 +121,7 @@ int decode_block(struct block_encoder_state * state, s8 test) {
 int main(int argc, char * argv[]) {
     int mode = 0;  // -1: encode, 0: unspecified, 1: encode, 2: test
     char *input = NULL, *output = NULL;  // input and output file names
-    u32 block_size = 8 * 1024 * 1024;    // the block size
+    u32 block_size = MiB(8);    // the block size
 
     for (int i = 1; i < argc; i++) {
         if (argv[i][0] == '-') {
@@ -132,7 +132,7 @@ int main(int argc, char * argv[]) {
             } else if (argv[i][1] == 't') {
                 mode = 2;
             } else if (argv[i][1] == 'b') {
-                block_size = 1024 * 1024 * atoi(argv[i + 1]);
+                block_size = MiB(atoi(argv[i + 1]));
                 i++;
             }
         } else {
@@ -175,13 +175,8 @@ int main(int argc, char * argv[]) {
         output_des = STDOUT_FILENO;
     }
 
-    if (block_size < KiB(65)) {
-        fprintf(stderr, "Block size must be at least 65 KiB.\n");
-        return 1;
-    }
-
-    if (block_size > MiB(2047)) {
-        fprintf(stderr, "Block size must be at most 2047 MiB.\n");
+    if (block_size < KiB(65) || block_size > MiB(2047)) {
+        fprintf(stderr, "Block size must be between 65 KiB and 2047 MiB.\n");
         return 1;
     }
 
@@ -213,6 +208,12 @@ int main(int argc, char * argv[]) {
             }
 
             read(input_des, &block_size, sizeof(u32));
+
+            if (block_size < KiB(65) || block_size > MiB(2047)) {
+                fprintf(stderr, "The input file is corrupted. Reason: Invalid block size in the header.\n");
+                return 1;
+            }
+
             break;
         }
     }
tab: 248 wrap: offon