Made it crash a little less often
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 18 Feb 2013 18:22:28 +0000 (19:22 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 18 Feb 2013 20:59:07 +0000 (21:59 +0100)
src/data/ods-reader.c

index 0e55eb273e0ec60e3e2069c925c3a41112e78bec..7b7059ad9840ed94dc53a18f5d85f48448b4fbec 100644 (file)
@@ -228,7 +228,7 @@ process_node (struct ods_reader *r)
                  r->sheet_index,  r->row);
 
          r->state = STATE_SPREADSHEET;
-         r->sheet_index = -1
+         r->sheet_index = -1;
        }
       break;
     case STATE_SPREADSHEET:
@@ -706,6 +706,7 @@ ods_make_reader (struct spreadsheet *spreadsheet,
        }
     }
 
+  printf ("%s:%d N varspecs %d\n", __FILE__, __LINE__, n_var_specs);
 
   /* Read in the first row of data */
   while (1 == xmlTextReaderRead (r->xtr))
@@ -729,6 +730,14 @@ ods_make_reader (struct spreadsheet *spreadsheet,
       if ( r->state == STATE_CELL_CONTENT &&
           XML_READER_TYPE_TEXT  == r->node_type)
        {
+
+         if ( idx >= n_var_specs) 
+           {
+             var_spec = xrealloc (var_spec, sizeof (*var_spec) * (idx + 1));
+             var_spec [idx].name = NULL;
+             n_var_specs = idx + 1;
+           }
+           
          var_spec [idx].firstval.type = type;
          var_spec [idx].firstval.text = xmlTextReaderValue (r->xtr);
          var_spec [idx].firstval.value = val_string;
@@ -738,6 +747,8 @@ ods_make_reader (struct spreadsheet *spreadsheet,
        }
     }
 
+  printf ("%s:%d N varspecs %d\n", __FILE__, __LINE__, n_var_specs);
+
   /* Create the dictionary and populate it */
   r->spreadsheet.dict = r->dict = dict_create (
     CHAR_CAST (const char *, xmlTextReaderConstEncoding (r->xtr)));