Bugfix: It would be possible to free(3) random garbage when unauthenticated
authorMatthew Mondor <mmondor@pulsar-zone.net>
Sat, 27 Mar 2010 06:16:42 +0000 (06:16 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Sat, 27 Mar 2010 06:16:42 +0000 (06:16 +0000)
sessions would terminate.

mmsoftware/mmmail/src/mmpop3d/mmpop3d.c

index ae82420..82aec03 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mmpop3d.c,v 1.59 2009/01/14 07:05:31 mmondor Exp $ */
+/* $Id: mmpop3d.c,v 1.60 2010/03/27 06:16:42 mmondor Exp $ */
 
 /*
  * Copyright (C) 2001-2008, Matthew Mondor
@@ -87,7 +87,7 @@
 
 MMCOPYRIGHT("@(#) Copyright (c) 2001-2007\n\
 \tMatthew Mondor. All rights reserved.\n");
-MMRCSID("$Id: mmpop3d.c,v 1.59 2009/01/14 07:05:31 mmondor Exp $");
+MMRCSID("$Id: mmpop3d.c,v 1.60 2010/03/27 06:16:42 mmondor Exp $");
 
 
 
@@ -522,8 +522,8 @@ auth_pass(clientenv *clenv)
                    "\"user\"=id WHERE address=$1 AND active='t'",
                    1, NULL, params, NULL, NULL, 0)) != NULL) {
                if (PQntuples(pgres) == 1) {
-                   mm_strcpy(id, PQgetvalue(pgres, 0, 0));
-                   mm_strcpy(pwhash, PQgetvalue(pgres, 0, 1));
+                   mm_strncpy(id, PQgetvalue(pgres, 0, 0), 32);
+                   mm_strncpy(pwhash, PQgetvalue(pgres, 0, 1), 34);
                }
                PQclear(pgres);
            } else
@@ -1236,7 +1236,7 @@ do_buildindex(clientenv *clenv)
            ok = TRUE;
            clenv->size = 0;
            for (i = 0; i < rows; i++) {
-               mm_strcpy(mnode[i].id, PQgetvalue(pgres, i, 0));
+               mm_strncpy(mnode[i].id, PQgetvalue(pgres, i, 0), 23);
                mnode[i].size = atol(PQgetvalue(pgres, i, 1));
                (void) snprintf(mnode[i].file, 255, "%s/%s", CONF.MAIL_DIR,
                                PQgetvalue(pgres, i, 2));
@@ -1616,6 +1616,8 @@ handleclient(unsigned long id, int fd, clientlistnode *clientlnode,
            clenv->retreived = clenv->deleted = 0;
            clenv->last = 0;
            clenv->login = FALSE;
+           clenv->mailbox = NULL;
+           clenv->index = NULL;
 
            reply(fdb, TRUE, "%s (%s (%s)) Service ready", iface->hostname,
                    DAEMON_NAME, DAEMON_VERSION);