From: Jeremy Harris Date: Wed, 5 Mar 2014 20:36:08 +0000 (+0000) Subject: Check for errors running cmdline scanner. Bug 1396 X-Git-Url: https://git.exim.org/users/jgh/exim.git/commitdiff_plain/bfc239352900fc3bddb6a564c9d037f421474470 Check for errors running cmdline scanner. Bug 1396 --- diff --git a/src/src/malware.c b/src/src/malware.c index b662f19fe..01209d684 100644 --- a/src/src/malware.c +++ b/src/src/malware.c @@ -918,7 +918,7 @@ malware_internal(uschar **listptr, uschar *eml_filename, BOOL faking) if (scanner_record == NULL) { int err = errno; - pclose(scanner_out); + (void) pclose(scanner_out); signal(SIGCHLD,eximsigchld); signal(SIGPIPE,eximsigpipe); return m_errlog_defer(scanent, string_sprintf("opening scanner output file (%s) failed: %s.", @@ -929,7 +929,7 @@ malware_internal(uschar **listptr, uschar *eml_filename, BOOL faking) while(fgets(CS linebuffer, sizeof(linebuffer), scanner_out)) { if ( Ustrlen(linebuffer) > fwrite(linebuffer, 1, Ustrlen(linebuffer), scanner_record) ) { /* short write */ - pclose(scanner_out); + (void) pclose(scanner_out); signal(SIGCHLD,eximsigchld); signal(SIGPIPE,eximsigpipe); return m_errlog_defer(scanent, string_sprintf("short write on scanner output file (%s).", file_name)); @@ -940,8 +940,15 @@ malware_internal(uschar **listptr, uschar *eml_filename, BOOL faking) } (void)fclose(scanner_record); - pclose(scanner_out); + sep = pclose(scanner_out); signal(SIGCHLD,eximsigchld); signal(SIGPIPE,eximsigpipe); + if (sep != 0) + if (sep == -1) + return m_errlog_defer(scanent, + string_sprintf("running scanner failed: %s", strerror(sep))); + else + return m_errlog_defer(scanent, + string_sprintf("scanner returned error code: %d", sep)); if (trigger) { uschar * s;