You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2006/04/03 17:18:05 UTC
svn commit: r391067 - in /spamassassin/trunk/spamc: libspamc.c libspamc.h
utils.h
Author: jm
Date: Mon Apr 3 08:18:03 2006
New Revision: 391067
URL: http://svn.apache.org/viewcvs?rev=391067&view=rev
Log:
bug 4593: revert changes made for bug 3452, where some spamc vars were made unsigned, resulting in infinite loop caused by an error condition in spamc
Modified:
spamassassin/trunk/spamc/libspamc.c
spamassassin/trunk/spamc/libspamc.h
spamassassin/trunk/spamc/utils.h
Modified: spamassassin/trunk/spamc/libspamc.c
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/spamc/libspamc.c?rev=391067&r1=391066&r2=391067&view=diff
==============================================================================
--- spamassassin/trunk/spamc/libspamc.c (original)
+++ spamassassin/trunk/spamc/libspamc.c Mon Apr 3 08:18:03 2006
@@ -500,7 +500,7 @@
return EX_IOERR;
}
m->type = MESSAGE_ERROR;
- if (m->raw_len > m->max_len)
+ if (m->raw_len > (int) m->max_len)
{
libspamc_log(m->priv->flags, LOG_ERR,
"skipped message, greater than max message size (%d bytes)",
@@ -534,7 +534,7 @@
return EX_IOERR;
}
m->type = MESSAGE_ERROR;
- if (m->raw_len > m->max_len)
+ if (m->raw_len > (int) m->max_len)
return EX_TOOBIG;
p = m->pre = m->raw;
/* Search for \nDATA\n which marks start of actual message */
@@ -555,15 +555,20 @@
break;
}
}
- p = q; // the above code ensures no other '\n' comes before q
+ p = q; /* the above code ensures no other '\n' comes before q */
}
if (m->msg == NULL)
return EX_DATAERR;
+ /* ensure this is >= 0 */
+ if (m->msg_len < 0) {
+ return EX_SOFTWARE;
+ }
+
/* Find the end-of-DATA line */
/* if bad format with no end ".\n" will truncate the last two characters of the buffer */
prev = '\n';
- for (i = j = 0; (i+2) < m->msg_len; i++) { /* (i+2) prevents out of bound reference msg[i+2] */
+ for (i = j = 0; (i+2) < (unsigned int) m->msg_len; i++) { /* (i+2) prevents out of bound reference msg[i+2] */
if (prev == '\n' && m->msg[i] == '.') {
/* Dot at the beginning of a line */
if ((m->msg[i + 1] == '\r' && m->msg[i + 2] == '\n')
@@ -963,7 +968,7 @@
_use_msg_for_out(m);
return EX_OSERR;
}
- len += sprintf(buf + len, "Content-length: %d\r\n\r\n", m->msg_len);
+ len += sprintf(buf + len, "Content-length: %d\r\n\r\n", (int) m->msg_len);
}
libspamc_timeout = m->timeout;
@@ -1140,7 +1145,13 @@
m.type = MESSAGE_NONE;
- m.max_len = max_size;
+ /* enforce max_size being unsigned, therefore >= 0 */
+ if (max_size < 0) {
+ ret = EX_SOFTWARE;
+ goto FAIL;
+ }
+ m.max_len = (unsigned int) max_size;
+
ret = message_read(in_fd, flags, &m);
if (ret != EX_OK)
goto FAIL;
@@ -1284,7 +1295,7 @@
_use_msg_for_out(m);
return EX_OSERR;
}
- len += sprintf(buf + len, "Content-length: %d\r\n\r\n", m->msg_len);
+ len += sprintf(buf + len, "Content-length: %d\r\n\r\n", (int) m->msg_len);
libspamc_timeout = m->timeout;
@@ -1487,7 +1498,7 @@
char **addrp;
#ifdef _WIN32
- // Start Winsock up
+ /* Start Winsock up */
WSADATA wsaData;
int nCode;
if ((nCode = WSAStartup(MAKEWORD(1, 1), &wsaData)) != 0) {
@@ -1646,11 +1657,11 @@
va_start(ap, msg);
if ((flags & SPAMC_LOG_TO_STDERR) != 0) {
- // create a log-line buffer
+ /* create a log-line buffer */
len = snprintf(buf, LOG_BUFSIZ, "spamc: ");
len += vsnprintf(buf+len, LOG_BUFSIZ-len, msg, ap);
- // avoid buffer overflow
+ /* avoid buffer overflow */
if (len > (LOG_BUFSIZ-2)) { len = (LOG_BUFSIZ-3); }
len += snprintf(buf+len, LOG_BUFSIZ-len, "\n");
Modified: spamassassin/trunk/spamc/libspamc.h
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/spamc/libspamc.h?rev=391067&r1=391066&r2=391067&view=diff
==============================================================================
--- spamassassin/trunk/spamc/libspamc.h (original)
+++ spamassassin/trunk/spamc/libspamc.h Mon Apr 3 08:18:03 2006
@@ -137,11 +137,12 @@
/* Filled in by message_read */
message_type_t type;
char *raw;
- unsigned int raw_len; /* Raw message buffer */
+ int raw_len; /* Raw message buffer */
+ /* note: do not make "raw_len" in particular unsigned! see bug 4593 */
char *pre;
int pre_len; /* Pre-message data (e.g. SMTP commands) */
char *msg;
- unsigned int msg_len; /* The message */
+ int msg_len; /* The message */
char *post;
int post_len; /* Post-message data (e.g. SMTP commands) */
int content_length;
Modified: spamassassin/trunk/spamc/utils.h
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/spamc/utils.h?rev=391067&r1=391066&r2=391067&view=diff
==============================================================================
--- spamassassin/trunk/spamc/utils.h (original)
+++ spamassassin/trunk/spamc/utils.h Mon Apr 3 08:18:03 2006
@@ -37,9 +37,9 @@
#ifdef _WIN32
#include <winsock.h>
-//
-// BSD-compatible socket error codes for Win32
-//
+/*
+ * BSD-compatible socket error codes for Win32
+ */
#define EWOULDBLOCK WSAEWOULDBLOCK
#define EINPROGRESS WSAEINPROGRESS
@@ -69,17 +69,17 @@
#define ETIMEDOUT WSAETIMEDOUT
#define ECONNREFUSED WSAECONNREFUSED
#define ELOOP WSAELOOP
-// #define ENAMETOOLONG WSAENAMETOOLONG
+/* #define ENAMETOOLONG WSAENAMETOOLONG */
#define EHOSTDOWN WSAEHOSTDOWN
#define EHOSTUNREACH WSAEHOSTUNREACH
-// #define ENOTEMPTY WSAENOTEMPTY
+/* #define ENOTEMPTY WSAENOTEMPTY */
#define EPROCLIM WSAEPROCLIM
#define EUSERS WSAEUSERS
#define EDQUOT WSAEDQUOT
#define ESTALE WSAESTALE
#define EREMOTE WSAEREMOTE
-// NOTE: these are not errno constants in UNIX!
+/* NOTE: these are not errno constants in UNIX! */
#define HOST_NOT_FOUND WSAHOST_NOT_FOUND
#define TRY_AGAIN WSATRY_AGAIN
#define NO_RECOVERY WSANO_RECOVERY