Bug (and fix!): Wily crashes if B2 target is very big
Bill Trost <[email protected]> Fri, 28 May 2004 20:00:49 -0700
| Newsgroups | gmane.editors.wily |
|---|---|
| Message-ID | <[email protected]> |
The subject line makes the problem clear -- I'm using a 280,000-character
selection for my "too big" B2 target.
Fix follows (this is against my hacked 0.13.36, but it looks like it should
apply fine against 0.13.41).
Index: event.c
===================================================================
RCS file: /home/trost/cvsroot/wily/wily/event.c,v
retrieving revision 1.2
diff -u -u -r1.2 event.c
--- event.c 7 Nov 1997 21:25:59 -0000 1.2
+++ event.c 29 May 2004 02:42:46 -0000
@@ -63,7 +63,7 @@
static void key_del(Key *k);
static Key* key_new(ulong key, int fd, Keytype t);
static Key* key_findcmd(char*cmd);
-static void oneword(char*s, char*l);
+static void oneword(char* s, char* l, int s_length);
static void output(Key*k, int n, char*s);
static void ex_accept(int n, char*s);
@@ -106,7 +106,7 @@
if(k->v) {
k->first = true;
} else {
- oneword(k->cmd, cmd);
+ oneword(k->cmd, cmd, sizeof(k->cmd));
olabel(k->olabel, label);
addrunning(k->cmd);
}
@@ -225,12 +225,11 @@
/* Put a one-word version of long command 'l' into 's' */
static void
-oneword(char*s, char*l){
- strcpy(s,l);
-
- /* break at first whitespace */
- if( (s = strpbrk(s, whitespace)) )
- *s='\0';
+oneword(char*s, char*l, int s_length){
+ char *blank = strpbrk(l, whitespace);
+ if (blank && blank - l < s_length)
+ s_length = blank - l;
+ strlcpy(s,l, s_length);
}
/* Copy the 'n' bytes of data in 's' to the window or output directory