Fixed a problem with segfault on attempting to load a nonexistant file.
authorDavid Griffith <dave@661.org>
Fri, 23 Sep 2016 09:27:15 +0000 (02:27 -0700)
committerDavid Griffith <dave@661.org>
Fri, 23 Sep 2016 09:27:15 +0000 (02:27 -0700)
ux_blorb_init() needs to be revisited to make sure all common blorb
filename extensions are supported.

src/common/frotz.h
src/curses/ux_blorb.c
src/curses/ux_init.c

index 549d39a1a4a1adefe859db8dcbda9175fe1b5cf4..d7807f6908c208ea2e3af0c9475d0ee488de67f1 100644 (file)
@@ -114,7 +114,9 @@ typedef struct {
 #define EXT_SAVE       ".qzl"
 #define EXT_SCRIPT     ".scr"
 #define EXT_BLORB      ".blb"
-#define EXT_BLORBLONG  ".blorb"
+#define EXT_BLORB2     ".zblb"
+#define EXT_BLORB3     ".blorb"
+#define EXT_BLORB4     ".zblorb"
 #define EXT_COMMAND    ".rec"
 #define EXT_AUX                ".aux"
 
index ab65ca64ee4ff7b36688cb9571a0a3274d44e8aa..29adefc3e9ba742adf0606899c950d038ec4ff70 100644 (file)
@@ -88,7 +88,7 @@ bb_err_t ux_blorb_init(char *filename)
         blorb_fp = fopen(filename, "rb");
     } else {
        len1 = strlen(filename) + strlen(EXT_BLORB);
-       len2 = strlen(filename) + strlen(EXT_BLORBLONG);
+       len2 = strlen(filename) + strlen(EXT_BLORB3);
 
        mystring = malloc(len2 * sizeof(char) + 1);
         strncat(mystring, filename, len1 * sizeof(char));
@@ -105,7 +105,7 @@ bb_err_t ux_blorb_init(char *filename)
         if ((blorb_fp = fopen(mystring, "rb")) == NULL) {
            p = rindex(mystring, '.');
            *p = '\0';
-            strncat(mystring, EXT_BLORBLONG, len2 * sizeof(char));
+            strncat(mystring, EXT_BLORB3, len2 * sizeof(char));
            blorb_fp = fopen(mystring, "rb");
        }
 
index 836c60dfaaa3e56fc547be84ab0ea1fc1e1bd541..ffd7158befa6ddbf1103ae44f3f0fb256b003713 100644 (file)
@@ -168,6 +168,8 @@ void os_process_arguments (int argc, char *argv[])
 {
     int c;
     char *p = NULL;
+    char *blorb_ext = NULL;
+
     char *home;
     char configfile[FILENAME_MAX + 1];
 
@@ -311,8 +313,26 @@ void os_process_arguments (int argc, char *argv[])
     f_setup.story_name = strdup(basename(argv[zoptind]));
 
     /* Now strip off the extension. */
-    p = rindex(f_setup.story_name, '.');
-    *p = 0;
+    p = strrchr(f_setup.story_name, '.');
+    if ((p != NULL) &&
+        ((strcmp(p,EXT_BLORB2) == 0) ||
+         (strcmp(p,EXT_BLORB3) == 0) ||
+         (strcmp(p,EXT_BLORB4) == 0) ) ) {
+        blorb_ext = strdup(p);
+    }
+    else
+       blorb_ext = strdup(EXT_BLORB);
+
+
+    /* Get rid of extensions with 1 to 6 character extensions. */
+    /* This will take care of an extension like ".zblorb". */
+    /* More than that, there might be something weird going on */
+    /* which is not our concern. */
+    if (p != NULL) {
+       if (strlen(p) >= 2 && strlen(p) <= 7) {
+           *p = '\0';      /* extension removed */
+       }
+    }
 
     f_setup.story_path = strdup(dirname(argv[zoptind]));