commit 16159a61acfad96a8a9905ffd01e3e048a0f1820
Author:     sin <[email protected]>
AuthorDate: Sat Jan 2 10:32:44 2016 +0000
Commit:     sin <[email protected]>
CommitDate: Sat Jan 2 10:33:56 2016 +0000

    ed: Use snprintf() for constructing the scratch filename

diff --git a/ed.c b/ed.c
index ed55581..686d2aa 100644
--- a/ed.c
+++ b/ed.c
@@ -328,17 +328,17 @@ clearbuf()
 static void
 setscratch()
 {
-       int k;
+       int r, k;
        char *dir;
 
        clearbuf();
        clearundo();
        if ((dir = getenv("TMPDIR")) == NULL)
-               dir = "/tmp/";
-       if (strlcpy(tmpname, dir, sizeof(tmpname)) >= sizeof(tmpname))
-               error("scratch file name too long");
-       if (strlcat(tmpname, "ed.XXXXXX", sizeof(tmpname)) >= sizeof(tmpname))
-               error("scratch file name too long");
+               dir = "/tmp";
+       r = snprintf(tmpname, sizeof(tmpname), "%s/%s",
+                    dir, "ed.XXXXXX");
+       if (r < 0 || (size_t)r >= sizeof(tmpname))
+               error("scratch filename too long");
        if ((scratch = mkstemp(tmpname)) < 0)
                error("failed to create scratch file");
        if ((k = makeline("", NULL)))

Reply via email to