lpd: avoid SEGVing on immediate EOF from peer
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 7 Jun 2019 07:14:41 +0000 (09:14 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 7 Jun 2019 07:14:41 +0000 (09:14 +0200)
Patch by Luís Marques <luismarques@lowrisc.org>

function                                             old     new   delta
lpd_main                                             749     757      +8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
printutils/lpd.c

index ce5944026b42ee8014e43284448540d6825cc70e..e48feef90f643c22cad47af8f91c312444cd7e40 100644 (file)
@@ -133,6 +133,8 @@ int lpd_main(int argc UNUSED_PARAM, char *argv[])
 
        // read command
        s = queue = xmalloc_read_stdin();
+       if (!s) // eof?
+               return EXIT_FAILURE;
        // we understand only "receive job" command
        if (2 != *queue) {
  unsupported_cmd:
@@ -204,7 +206,7 @@ int lpd_main(int argc UNUSED_PARAM, char *argv[])
                }
 
                // validate input.
-               // we understand only "control file" or "data file" cmds
+               // we understand only "control file" or "data file" subcmds
                if (2 != s[0] && 3 != s[0])
                        goto unsupported_cmd;
                if (spooling & (1 << (s[0]-1))) {
@@ -291,7 +293,7 @@ int lpd_main(int argc UNUSED_PARAM, char *argv[])
  err_exit:
        // don't keep corrupted files
        if (spooling) {
-#define i spooling
+               int i;
                for (i = 2; --i >= 0; )
                        if (filenames[i])
                                unlink(filenames[i]);