wiberg@chalmers.UUCP (Sven Wiberg) (01/26/84)
(Blank line) It seems like some people out there have been bitten by the same bug as we, so here's a diff list of our fix. It has worked as far as we can see, which is only about a week. 1a2,17 > > /* > * cron.c - clock daemon. > * > * Chalmers bug fix, 1984 01 23: > * Test for list space (100 bytes ahead) in main loop of init() > * was insufficient for long lines at certain places in crontab, > * causing segmentation faults. It has been moved into each > * nested loop and now has to think just a few bytes ahead at a > * time, thus permitting arbitrarily long lines anywhere. > * Also, an error test on the initial fork() has been added, > * and harmless but redundant calls to free() before realloc() > * have been removed. > * CB & STW. > */ > 10d25 < 15a31 > 27a44 > register int fret; 32,33c49,55 < /* setuid(1); */ < if (fork()) --- > /* setuid(1); */ > if ((fret=fork()) < 0) /* CB - 84 01 19 */ > { > fprintf(stderr,"Cron: can't fork\n"); > exit(1); > } > else if(fret) 140,143c162,163 < register i, c; < register char *cp; < register char *ocp; < register int n; --- > register i, c, n; > register char *cp, *ocp, *olist; 146,147c166 < if (list) { < free(list); --- > if (list) 149c168 < } else --- > else 154,162c173 < loop: < if(cp > list+listsize-100) { < char *olist; < listsize += LISTS; < olist = list; < free(list); < list = realloc(list, listsize); < cp = list + (cp - olist); < } --- > loop: /* List space test moved. STW - 84 01 23 */ 172a184,188 > if(cp >= list+listsize-3) { /* STW - 84 01 23 */ > olist = list; > list = realloc(list, listsize += LISTS); > cp = list + (cp - olist); > } 195a212,216 > if(cp >= list+listsize-2) { /* STW - 84 01 23 */ > olist = list; > list = realloc(list, listsize += LISTS); > cp = list + (cp - olist); > } 218a240,244 > if(cp >= list+listsize-3) { /* STW - 84 01 23 */ > olist = list; > list = realloc(list, listsize += LISTS); > cp = list + (cp - olist); > } 229a256,260 > if(cp >= list+listsize-2) { /* STW - 84 01 23 */ > olist = list; > list = realloc(list, listsize += LISTS); > cp = list + (cp - olist); > } Good luck! Sven T. Wiberg @ Chalmers