From dg at lamancha.blitzed.org Sat Sep 22 17:04:43 2007 From: dg at lamancha.blitzed.org (David Leadbeater) Date: Sat, 22 Sep 2007 17:04:43 +0000 (UTC) Subject: CVS: services/src mysql.c,1.12,1.13 Message-ID: <20070922170443.3E09973053@lamancha.blitzed.org> Update of /data/cvs/services/src In directory lamancha.blitzed.org:/tmp/cvs-serv28542 Modified Files: mysql.c Log Message: Fix for /cs access #chan view -1-1 crash. Index: mysql.c =================================================================== RCS file: /data/cvs/services/src/mysql.c,v retrieving revision 1.12 retrieving revision 1.13 diff --unified=6 -r1.12 -r1.13 --- mysql.c 8 Apr 2004 16:57:17 -0000 1.12 +++ mysql.c 22 Sep 2007 17:04:40 -0000 1.13 @@ -432,12 +432,15 @@ n2 = strtoul(numstr, (char **)&numstr, 10); numstr += strcspn(numstr, "0123456789,-"); } } /* Sanity check. */ + if (n1 < 0) + n1 = 0; + if (n1 > max) n1 = max; if (n2 > max) n2 = max; From dg at lamancha.blitzed.org Sat Sep 22 17:19:35 2007 From: dg at lamancha.blitzed.org (David Leadbeater) Date: Sat, 22 Sep 2007 17:19:35 +0000 (UTC) Subject: CVS: services/src mysql.c,1.13,1.14 Message-ID: <20070922171935.4A1A973038@lamancha.blitzed.org> Update of /data/cvs/services/src In directory lamancha.blitzed.org:/tmp/cvs-serv28811 Modified Files: mysql.c Log Message: Actually that previous fix was madly wrong. I've just added the missing else that adds a 0 to the condition, this just stops a syntax error for MySQL as well as covering all potential cases. Index: mysql.c =================================================================== RCS file: /data/cvs/services/src/mysql.c,v retrieving revision 1.13 retrieving revision 1.14 diff --unified=6 -r1.13 -r1.14 --- mysql.c 22 Sep 2007 17:04:40 -0000 1.13 +++ mysql.c 22 Sep 2007 17:19:33 -0000 1.14 @@ -432,15 +432,12 @@ n2 = strtoul(numstr, (char **)&numstr, 10); numstr += strcspn(numstr, "0123456789,-"); } } /* Sanity check. */ - if (n1 < 0) - n1 = 0; - if (n1 > max) n1 = max; if (n2 > max) n2 = max; @@ -484,13 +481,24 @@ first = 0; chunk_len = strlen(chunk); query = realloc(query, chunk_len + size); strncat(query, chunk, chunk_len); size = strlen(query) + 1; - } + } else if (first) { + /* This matches nothing */ + first = 0; + + memset(chunk, 0, sizeof(chunk)); + snprintf(chunk, sizeof(chunk), "0"); + + chunk_len = strlen(chunk); + query = realloc(query, chunk_len + size); + strncat(query, chunk, chunk_len); + size = strlen(query) + 1; + } numstr += strcspn(numstr, ","); if (*numstr) numstr++; }