Hi! I stumbled across an array overflow in the dmenu history patch: dmenu sometimes crashed when the history file had more than HIST_SIZE entries. The attached patch fixes that.
The patch also removes the blank lines that got written to the history file when a dmenu selection was aborted. Regards, Christian -- ....Christian.Garbs.....................................http://www.cgarbs.de Gib Gates keine Chance!
diff -Narup 00_dmenu-2.8_history/main.c 01_dmenu-2.8_fixemptylines/main.c --- 00_dmenu-2.8_history/main.c 2007-04-03 20:52:57.000000000 +0200 +++ 01_dmenu-2.8_fixemptylines/main.c 2007-04-03 20:57:17.000000000 +0200 @@ -83,8 +83,9 @@ writehistory(char *command) { if( (f = fopen(histfile, "w")) ) { fputs(command, f); fputc('\n', f); for(; i<HIST_SIZE && i<j; i++) { - if(strcmp(command, hist[i]) != 0) + if(strcmp(command, hist[i]) != 0) { fputs(hist[i], f); fputc('\n', f); + } } fclose(f); return 1; @@ -103,7 +104,7 @@ readhistory (void) { return 0; if( (f = fopen(histfile, "r+")) ) { - while(fgets(buf, sizeof buf, f)) + while(fgets(buf, sizeof buf, f) && (hcnt < HIST_SIZE)) strncpy(hist[hcnt++], buf, (strlen(buf) <= 1024) ? strlen(buf): 1024 ); fclose(f); }
signature.asc
Description: Digital signature