unzck: require a *.zck extension
authorPeter Pentchev <roam@ringlet.net>
Sun, 31 May 2020 20:38:35 +0000 (23:38 +0300)
committerPeter Pentchev <roam@ringlet.net>
Sun, 31 May 2020 20:46:31 +0000 (23:46 +0300)
Blindly removing the last four characters from a filename may lead to
unexpected results if somebody has created a zchunk archive with
a non-standard name.

src/unzck.c

index acb72d5173d3ba6236bc35d8a524ce018869393b..01eff6f49d9c852fa01681268eb3a510ea08a617 100644 (file)
@@ -120,6 +120,13 @@ int main (int argc, char *argv[]) {
 
     zck_set_log_level(arguments.log_level);
 
+    if(!arguments.std_out) {
+        if(strlen(arguments.args[0]) < 5 ||
+           strcmp(arguments.args[0] + strlen(arguments.args[0]) - 4, ".zck") != 0) {
+            dprintf(STDERR_FILENO, "Not a *.zck file: %s\n", arguments.args[0]);
+            exit(1);
+        }
+    }
     int src_fd = open(arguments.args[0], O_RDONLY);
     if(src_fd < 0) {
         dprintf(STDERR_FILENO, "Unable to open %s\n", arguments.args[0]);