Hello,
We've been experiencing quota warnings being delivered when a mailbox
is way below quota. I think i have the problem tracked down to using
safecat for message delivery under certain circumstances - safecat
doesn't append the message size to the filename and that seems to be
causing problems with the get_file_size function.
Picking through the code, it seems the get_file_size function assumes
the message size will be appended to the filename and never actually
reaches the code that does a stat() on the filename. In the case of
a safecat created file, the "s += 3" within the while() loop in
get_file_size runs past the end of the filename buffer so it
calculates the size based on "random" memory and sometimes comes up
with a number that's way too big.
As a fix, i put an additional test into get_file_size to double-check
that the filesize is actually appended and breaks out of the while()
so the filename can be stat()'ed if there's no filesize. The patch
below (against 0901) implements this fix.
Can somebody please take a look at this patch and let me know if i'm
asking for trouble or if it will fix the problem?
-neil
--- maildir++.c.orig Fri Oct 11 00:15:18 2002
+++ maildir++.c Fri Oct 11 00:18:37 2002
@@ -524,6 +524,7 @@
if ( *s != ',' || s[1] != 'S' || s[2] != '=' ) {
s++;
} else {
+ if (s[2] != '=') break;
s += 3;
st->st_size = 0;
while ( *s >= '0' && *s <= '9' )