Check for errors running cmdline scanner. Bug 1396 malware-1418
authorJeremy Harris <jgh146exb@wizmail.org>
Wed, 5 Mar 2014 20:36:08 +0000 (20:36 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Wed, 5 Mar 2014 20:36:08 +0000 (20:36 +0000)
src/src/malware.c

index b662f19fe102fb3862a5d2b7963fa043cfec8f7a..01209d6847bcf9ba48dd56ded0598db013521d09 100644 (file)
@@ -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;