lpd: avoid SEGVing on immediate EOF from peer

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>
This commit is contained in:
Denys Vlasenko 2019-06-07 09:14:41 +02:00
parent 45e3967c20
commit ed042010dc

View 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]);