Gordon Messmer wrote:
> Charles Galpin wrote:
> > Can you also explain what you mean about netscape. I don't use it's client
> > much. How do things like outlook express like maildirs?
>
> Both netscape and outlook express are terrible IMAP clients. Netscape
> often requests message id -1, which is totally invalid, and courier
> rejects that. Netscape then dies, and will no longer retrieve new
> headers from courier-imap.
Hehe, I think that the following patch should be sufficient. Basically,
since only numeric input (or *) is valid, I strip out any character that
isn't a number or a '*' OR is a '0'. It's still possible that a broken
request won't return the message expected, but I can't fix everything.
I'm going to mail test this a bit before I send it to the courier-imap
author, but I'm uploading rpms of courier-imap to
ftp://duke.eburg.com/pub/linux/redhat-6.x-mycontrib now.
MSG
--- courier-imap-0.21/imap/imaptoken.c.orig Mon Jan 10 21:42:24 2000
+++ courier-imap-0.21/imap/imaptoken.c Mon Jan 10 21:41:24 2000
@@ -386,6 +386,24 @@
if (tok->tokentype == IT_NUMBER) return (1);
if (tok->tokentype != IT_ATOM) return (0);
p=tok->tokenbuf;
+
+ if ( (!isdigit((int)(unsigned char)*p) || *p == '0')
+ && *p != '*')
+ {
+ char *tmp;
+
+ while ( (!isdigit((int)(unsigned char)*p) || *p == '0')
+ && *p != '*')
+ {
+ p++;
+ }
+ if(*p == 0) return(0);
+
+ tmp = strdup(p);
+ free(tok->tokenbuf);
+ tok->tokenbuf = tmp;
+ }
+
while (isdigit((int)(unsigned char)*p) || *p == '*')
{
if (*p == '0') return (0);