sam-d's anti-buffer-overflow patch
[irc7] / irc.c
diff --git a/irc.c b/irc.c
index b79aaf2bdb535801bc557a5e68c27ebd0e58f3cd..4be275a03d77276b48dc09e2df18cd5b3079a09a 100644 (file)
--- a/irc.c
+++ b/irc.c
@@ -531,7 +531,7 @@ int
 pmsg(int, char *time, char *pre, char *, char *par[])
 {
        int n = 0;
-       char buf[8192];
+       char *buf;
        char *c, *tc;
 
 /*
@@ -549,12 +549,15 @@ pmsg(int, char *time, char *pre, char *, char *par[])
        }
 
        if(!pre)
-               sprint(buf, "%s (%s) ⇐ %s\n", time, par[0], par[1]);
+               buf = smprint("%s (%s) ⇐ %s\n", time, par[0], par[1]);
        else if(*par[0] != '#')
-               sprint(buf, "%s (%s) ⇒ %s\n", time, pre, par[1]);
+               buf = smprint("%s (%s) ⇒ %s\n", time, pre, par[1]);
        else
-               sprint(buf, "%s %s → %s\n", time, pre, par[1]);
+               buf = smprint("%s %s → %s\n", time, pre, par[1]);
        
+       if(!buf)
+               sysfatal("failed to allocate space for message: %r\n");
+
        c = buf;
 again:
        if(strlen(c) >= linewidth) {
@@ -572,6 +575,7 @@ again:
                }
        }
        n += fprint(scr, "%s", c);
+       free(buf);
        return n;
 }