Attached.

-Nigel


> > There is 2 buffer overrun possibilities which can cause assert()'s to be
> > triggered, which takes down clamav-milter.
> >
> > I've sent patches through to Nigel Horne concerning this.
> 
> I must have missed them. Please resend.
> 
> - -Nigel
> 
diff -c --new-file --recursive clamav-0.60_vanilla/clamav-milter/clamav-milter.c 
clamav-0.60_milterfixes/clamav-milter/clamav-milter.c
*** clamav-0.60_vanilla/clamav-milter/clamav-milter.c   Tue May 30 01:17:00 2000
--- clamav-0.60_milterfixes/clamav-milter/clamav-milter.c       Thu Jul 10 08:22:20 
2003
***************
*** 925,933 ****
                        syslog(LOG_NOTICE, "clean message from %s", privdata->from);
        } else {
                char **to;
!               char err[1024];
                FILE *sendmail;
  
                /*
                 * TODO: check that clamd didn't crash (WIFSIGNALED(status))
                 */
--- 925,935 ----
                        syslog(LOG_NOTICE, "clean message from %s", privdata->from);
        } else {
                char **to;
!               char *err;
                FILE *sendmail;
+               int i;
  
+               
                /*
                 * TODO: check that clamd didn't crash (WIFSIGNALED(status))
                 */
***************
*** 935,949 ****
                        syslog(LOG_NOTICE, mess);
  
                snprintf(err, sizeof(err), "Intercepted virus from: %s to:", 
privdata->from);
!               ptr = strchr(err, '\0');
!               /* TODO: check for buffer overrun in err[] */
!               for(to = privdata->to; *to; to++) {
!                       ptr = strrcpy(ptr, " ");
                        ptr = strrcpy(ptr, *to);
                }
  
-               assert(strlen(err) < sizeof(err));
- 
                if(use_syslog)
                        syslog(LOG_NOTICE, err);
  #ifdef        CL_DEBUG
--- 937,963 ----
                        syslog(LOG_NOTICE, mess);
  
                snprintf(err, sizeof(err), "Intercepted virus from: %s to:", 
privdata->from);
! 
!               /* 
!                * Setup err as a list of recipients
!                */
!               i = 1024;
!               err = (char *) malloc(i);
!               ptr = err;
!               
!               for (to = privdata->to; *to; to++) {
!                       /* 
!                        * Re-alloc if we run out of buffer space
!                        */
!                       if (ptr + 5 + strlen(*to) >= err + i) {
!                               i += 1024;
!                               realloc(err,i);
!                       }
!                       ptr = strrcpy(ptr, "    ");
                        ptr = strrcpy(ptr, *to);
+                       ptr = strrcpy(ptr, "\n");
                }
  
                if(use_syslog)
                        syslog(LOG_NOTICE, err);
  #ifdef        CL_DEBUG
***************
*** 978,983 ****
--- 992,998 ----
  
                smfi_setreply(ctx, "550", "5.7.1", "Virus detected by ClamAV - 
http://clamav.elektrapro.com";);
                rc = SMFIS_REJECT;
+               free(err);
        }
        clamfi_cleanup(ctx);
  
***************
*** 1117,1127 ****
                va_list argp;
  
                va_start(argp, format);
!               vsprintf(output, format, argp);
                va_end(argp);
  
                len = strlen(output);
-               assert(len <= sizeof(output));
                ptr = output;
        }
  #ifdef        CL_DEBUG
--- 1132,1141 ----
                va_list argp;
  
                va_start(argp, format);
!               vsnprintf(output, BUFSIZ, format, argp);
                va_end(argp);
  
                len = strlen(output);
                ptr = output;
        }
  #ifdef        CL_DEBUG

Attachment: pgp00000.pgp
Description: PGP signature

Reply via email to