Fixed an assertion failure in psppire-dump-sav when reading a corrupt file.
authorJohn Darrington <john@cellform.com>
Sun, 25 Jun 2023 16:20:39 +0000 (18:20 +0200)
committerJohn Darrington <john@cellform.com>
Sun, 25 Jun 2023 16:22:10 +0000 (18:22 +0200)
Closes bug #62980

utilities/pspp-dump-sav.c

index ce524eb20d4a8b673d138a23d988e3bf7815456d..05b89b52caa3fa7ec0215f28ef4691be1a2595ea 100644 (file)
@@ -1094,23 +1094,29 @@ read_long_string_value_labels (struct sfm_reader *r, size_t size, size_t count)
       /* Read values. */
       for (i = 0; i < n_values; i++)
         {
-          char *value;
+          char *value = NULL;
           int value_length;
 
-          char *label;
+          char *label = NULL;
           int label_length;
 
           posn = ftello (r->file);
 
           /* Read value. */
           value_length = read_int (r);
-          value = xmalloc (value_length + 1);
-          read_string (r, value, value_length + 1);
+          if (value_length > 0)
+            {
+              value = xmalloc (value_length + 1);
+              read_string (r, value, value_length + 1);
+            }
 
           /* Read label. */
           label_length = read_int (r);
-          label = xmalloc (label_length + 1);
-          read_string (r, label, label_length + 1);
+          if (label_length > 0)
+            {
+              label = xmalloc (label_length + 1);
+              read_string (r, label, label_length + 1);
+            }
 
           printf ("\t\t%08llx: \"%s\" (%d bytes) => \"%s\" (%d bytes)\n",
                   posn, value, value_length, label, label_length);