Thu Jan 20 21:23:11 2011 UTC ()
avoid crash if certain operations are done before an input record is
read, ie in a BEGIN rule


(drochner)
diff -r1.3 -r1.4 src/external/historical/nawk/dist/lib.c

cvs diff -r1.3 -r1.4 src/external/historical/nawk/dist/lib.c (expand / switch to unified diff)

--- src/external/historical/nawk/dist/lib.c 2010/11/07 22:55:26 1.3
+++ src/external/historical/nawk/dist/lib.c 2011/01/20 21:23:11 1.4
@@ -318,27 +318,29 @@ void fldbld(void) /* create fields from  @@ -318,27 +318,29 @@ void fldbld(void) /* create fields from
318 return; 318 return;
319 if (!isstr(fldtab[0])) 319 if (!isstr(fldtab[0]))
320 getsval(fldtab[0]); 320 getsval(fldtab[0]);
321 r = fldtab[0]->sval; 321 r = fldtab[0]->sval;
322 n = strlen(r); 322 n = strlen(r);
323 if (n > fieldssize) { 323 if (n > fieldssize) {
324 xfree(fields); 324 xfree(fields);
325 if ((fields = malloc(n+1)) == NULL) 325 if ((fields = malloc(n+1)) == NULL)
326 FATAL("out of space for fields in fldbld %d", n); 326 FATAL("out of space for fields in fldbld %d", n);
327 fieldssize = n; 327 fieldssize = n;
328 } 328 }
329 fr = fields; 329 fr = fields;
330 i = 0; /* number of fields accumulated here */ 330 i = 0; /* number of fields accumulated here */
331 if (inputFS[0] && inputFS[1]) { /* it's a regular expression */ 331 if (!inputFS) {
 332 /* do nothing */
 333 } else if (inputFS[0] && inputFS[1]) { /* it's a regular expression */
332 i = refldbld(r, inputFS); 334 i = refldbld(r, inputFS);
333 } else if ((sep = *inputFS) == ' ') { /* default whitespace */ 335 } else if ((sep = *inputFS) == ' ') { /* default whitespace */
334 for (i = 0; ; ) { 336 for (i = 0; ; ) {
335 while (*r == ' ' || *r == '\t' || *r == '\n') 337 while (*r == ' ' || *r == '\t' || *r == '\n')
336 r++; 338 r++;
337 if (*r == 0) 339 if (*r == 0)
338 break; 340 break;
339 i++; 341 i++;
340 if (i > nfields) 342 if (i > nfields)
341 growfldtab(i); 343 growfldtab(i);
342 if (freeable(fldtab[i])) 344 if (freeable(fldtab[i]))
343 xfree(fldtab[i]->sval); 345 xfree(fldtab[i]->sval);
344 fldtab[i]->sval = fr; 346 fldtab[i]->sval = fr;