=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/util.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- src/usr.bin/cvs/util.c 2004/12/06 21:03:13 1.15 +++ src/usr.bin/cvs/util.c 2004/12/06 21:13:49 1.16 @@ -1,4 +1,4 @@ -/* $OpenBSD: util.c,v 1.15 2004/12/06 21:03:13 deraadt Exp $ */ +/* $OpenBSD: util.c,v 1.16 2004/12/06 21:13:49 jfb Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. @@ -393,12 +393,13 @@ i = 0; memset(qbuf, 0, sizeof(qbuf)); while (*lp != '"') { + if (*lp == '\\') + lp++; if (*lp == '\0') { cvs_log(LP_ERR, "no terminating quote"); err++; break; - } else if (*lp == '\\') - lp++; + } qbuf[i++] = *lp++; if (i == sizeof(qbuf)) { @@ -418,6 +419,11 @@ arg = cp; } + if (argc == argvlen) { + err++; + break; + } + argv[argc] = strdup(arg); if (argv[argc] == NULL) { cvs_log(LP_ERRNO, "failed to copy argument"); @@ -450,7 +456,8 @@ int i; for (i = 0; i < argc; i++) - free(argv[i]); + if (argv[i] != NULL) + free(argv[i]); }