cvs-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Cvs-cvs] ccvs/src ChangeLog add.c edit.c lock.c rcs.c se...


From: Mark D. Baushke
Subject: [Cvs-cvs] ccvs/src ChangeLog add.c edit.c lock.c rcs.c se...
Date: Fri, 26 May 2006 19:25:57 +0000

CVSROOT:        /cvsroot/cvs
Module name:    ccvs
Branch:         
Changes by:     Mark D. Baushke <address@hidden>        06/05/26 19:25:57

Modified files:
        src            : ChangeLog add.c edit.c lock.c rcs.c server.c 
                         tag.c 

Log message:
        Merge changes from 1.11.x.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/ChangeLog.diff?tr1=1.3432&tr2=1.3433&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/add.c.diff?tr1=1.124&tr2=1.125&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/edit.c.diff?tr1=1.93&tr2=1.94&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/lock.c.diff?tr1=1.119&tr2=1.120&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/rcs.c.diff?tr1=1.369&tr2=1.370&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/server.c.diff?tr1=1.463&tr2=1.464&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/tag.c.diff?tr1=1.148&tr2=1.149&r1=text&r2=text

Patches:
Index: ccvs/src/ChangeLog
diff -u ccvs/src/ChangeLog:1.3432 ccvs/src/ChangeLog:1.3433
--- ccvs/src/ChangeLog:1.3432   Fri May 26 04:35:57 2006
+++ ccvs/src/ChangeLog  Fri May 26 19:25:57 2006
@@ -1,3 +1,32 @@
+2006-05-26  Mark D. Baushke  <address@hidden>
+
+       * add.c (add): Do not leak memory.
+       [Fixes NetBSD coverity cid-2199.]
+
+       * edit.c (onoff_fileproc): Do not leak memory.
+       [Fixes NetBSD coverity cid-2201.]
+
+       * edit.c (onoff_filesdoneproc): Do not leak memory.
+       [Fixes NetBSD coverity cid-2202.]
+
+       * lock.c (readers_exist): Add assert (lockdir).
+       [Fixes NetBSD coverity cid-2411.]
+
+       * rcs.c (RCS_findlock_or_tip): Do not leak memory.
+       [Fixes NetBSD coverity cid-2198.]
+
+       * rcs.c (RCS_getdate): Avoid possible NULL dereference.
+       [Fixes NetBSD coverity cid-2412.]
+
+       * server.c (serve_sticky): Do not leak file descriptors.
+       [Fixes NetBSD coverity cid-2197.]
+
+       * server.c (do_cvs_command): Do not leak memory.
+       [Fixes NetBSD coverity cid-2204.]
+
+       * tag.c (add_to_val_tags): Do not leak memory.
+       [Fixes NetBSD coverity cid-2071.]
+
 2006-05-25  Derek Price  <address@hidden>
 
        * rsh-client.c (start_rsh_server): Remove verbose comment attempting to
Index: ccvs/src/add.c
diff -u ccvs/src/add.c:1.124 ccvs/src/add.c:1.125
--- ccvs/src/add.c:1.124        Fri May 12 17:12:46 2006
+++ ccvs/src/add.c      Fri May 26 19:25:57 2006
@@ -175,11 +175,15 @@
        int j;
 
        if (argc == 0)
+       {
            /* We snipped out all the arguments in the above sanity
               check.  We can just forget the whole thing (and we
               better, because if we fired up the server and passed it
               nothing, it would spit back a usage message).  */
+           if (options)
+               free (options);
            return err;
+       }
 
        start_server ();
        ign_setup ();
Index: ccvs/src/edit.c
diff -u ccvs/src/edit.c:1.93 ccvs/src/edit.c:1.94
--- ccvs/src/edit.c:1.93        Thu May  4 16:48:01 2006
+++ ccvs/src/edit.c     Fri May 26 19:25:57 2006
@@ -50,8 +50,10 @@
 static int
 onoff_fileproc (void *callerdat, struct file_info *finfo)
 {
-    fileattr_get0 (finfo->file, "_watched");
+    char *watched = fileattr_get0 (finfo->file, "_watched");
     fileattr_set (finfo->file, "_watched", turning_on ? "" : NULL);
+    if (watched != NULL)
+       free (watched);
     return 0;
 }
 
@@ -63,8 +65,10 @@
 {
     if (setting_default)
     {
-       fileattr_get0 (NULL, "_watched");
+       char *watched = fileattr_get0 (NULL, "_watched");
        fileattr_set (NULL, "_watched", turning_on ? "" : NULL);
+       if (watched != NULL)
+           free (watched);
     }
     return err;
 }
Index: ccvs/src/lock.c
diff -u ccvs/src/lock.c:1.119 ccvs/src/lock.c:1.120
--- ccvs/src/lock.c:1.119       Mon Apr 24 18:50:26 2006
+++ ccvs/src/lock.c     Fri May 26 19:25:57 2006
@@ -609,6 +609,9 @@
           repository, filepat, ignore ? ignore : "(null)");
 
     lockdir = lock_name (repository, "");
+
+    assert (lockdir != NULL);
+
     lockdir[strlen (lockdir) - 1] = '\0';   /* remove trailing slash */
 
     do {
Index: ccvs/src/rcs.c
diff -u ccvs/src/rcs.c:1.369 ccvs/src/rcs.c:1.370
--- ccvs/src/rcs.c:1.369        Wed May 24 16:38:51 2006
+++ ccvs/src/rcs.c      Fri May 26 19:25:57 2006
@@ -3010,6 +3010,8 @@
        {
            char *date_1_1 = vers->date;
 
+           assert (p->data != NULL);
+
            vers = p->data;
            if (RCS_datecmp (vers->date, date_1_1) != 0)
                return xstrdup ("1.1");
@@ -5070,6 +5072,7 @@
     char *user = getcaller();
     Node *lock, *p;
     List *locklist;
+    char *defaultrev = NULL;
 
     /* Find unique delta locked by caller. This code is very similar
        to the code in RCS_unlock -- perhaps it could be abstracted
@@ -5115,7 +5118,10 @@
        those error checks are to make users lock before a checkin, and we do
        that in other ways if at all anyway (e.g. rcslock.pl).  */
 
-    p = findnode (rcs->versions, RCS_getbranch (rcs, rcs->branch, 0));
+    defaultrev = RCS_getbranch (rcs, rcs->branch, 0);
+    p = findnode (rcs->versions, defaultrev);
+    if (defaultrev != NULL)
+       free (defaultrev);
     if (!p)
     {
        error (0, 0, "RCS file `%s' does not contain its default revision.",
Index: ccvs/src/server.c
diff -u ccvs/src/server.c:1.463 ccvs/src/server.c:1.464
--- ccvs/src/server.c:1.463     Sat May 13 00:54:04 2006
+++ ccvs/src/server.c   Fri May 26 19:25:57 2006
@@ -1532,6 +1532,7 @@
        if (alloc_pending (80 + strlen (CVSADM_TAG)))
            sprintf (pending_error_text, "E cannot write to %s", CVSADM_TAG);
        pending_error = save_errno;
+       (void) fclose (f);
        return;
     }
     if (fclose (f) == EOF)
@@ -3959,9 +3960,10 @@
 
     /* OK, sit around getting all the input from the child.  */
     {
-       struct buffer *stdoutbuf;
-       struct buffer *stderrbuf;
-       struct buffer *protocol_inbuf;
+       struct buffer *stdoutbuf = NULL;
+       struct buffer *stderrbuf = NULL;
+       struct buffer *protocol_inbuf = NULL;
+       int err_exit = 0;
        /* Number of file descriptors to check in select ().  */
        int num_to_check;
        int count_needed = 1;
@@ -4011,7 +4013,8 @@
        {
            buf_output0 (buf_to_net, "E close failed\n");
            print_error (errno);
-           goto error_exit;
+           err_exit = 1;
+           goto child_finish;
        }
        stdout_pipe[1] = -1;
 
@@ -4019,7 +4022,8 @@
        {
            buf_output0 (buf_to_net, "E close failed\n");
            print_error (errno);
-           goto error_exit;
+           err_exit = 1;
+           goto child_finish;
        }
        stderr_pipe[1] = -1;
 
@@ -4027,7 +4031,8 @@
        {
            buf_output0 (buf_to_net, "E close failed\n");
            print_error (errno);
-           goto error_exit;
+           err_exit = 1;
+           goto child_finish;
        }
        protocol_pipe[1] = -1;
 
@@ -4036,7 +4041,8 @@
        {
            buf_output0 (buf_to_net, "E close failed\n");
            print_error (errno);
-           goto error_exit;
+           err_exit = 1;
+           goto child_finish;
        }
        flowcontrol_pipe[0] = -1;
 # endif /* SERVER_FLOWCONTROL */
@@ -4046,7 +4052,8 @@
            buf_output0 (buf_to_net, "E close failed\n");
            print_error (errno);
            dev_null_fd = -1;   /* Do not try to close it again. */
-           goto error_exit;
+           err_exit = 1;
+           goto child_finish;
        }
        dev_null_fd = -1;
 
@@ -4133,7 +4140,8 @@
                {
                    buf_output0 (buf_to_net, "E select failed\n");
                    print_error (errno);
-                   goto error_exit;
+                   err_exit = 1;
+                   goto child_finish;
                }
            } while (numfds < 0);
 
@@ -4166,7 +4174,8 @@
                {
                    buf_output0 (buf_to_net, "E buf_input_data failed\n");
                    print_error (status);
-                   goto error_exit;
+                   err_exit = 1;
+                   goto child_finish;
                }
 
                /*
@@ -4240,7 +4249,8 @@
                {
                    buf_output0 (buf_to_net, "E buf_input_data failed\n");
                    print_error (status);
-                   goto error_exit;
+                   err_exit = 1;
+                   goto child_finish;
                }
 
                /* What should we do with errors?  syslog() them?  */
@@ -4265,7 +4275,8 @@
                {
                    buf_output0 (buf_to_net, "E buf_input_data failed\n");
                    print_error (status);
-                   goto error_exit;
+                   err_exit = 1;
+                   goto child_finish;
                }
 
                /* What should we do with errors?  syslog() them?  */
@@ -4345,21 +4356,33 @@
                command_pid = -1;
        }
 
+      child_finish:
        /*
         * OK, we've waited for the child.  By now all CVS locks are free
         * and it's OK to block on the network.
         */
        set_block (buf_to_net);
        buf_flush (buf_to_net, 1);
-       buf_shutdown (protocol_inbuf);
-       buf_free (protocol_inbuf);
-       protocol_inbuf = NULL;
-       buf_shutdown (stderrbuf);
-       buf_free (stderrbuf);
-       stderrbuf = NULL;
-       buf_shutdown (stdoutbuf);
-       buf_free (stdoutbuf);
-       stdoutbuf = NULL;
+       if (protocol_inbuf)
+       {
+           buf_shutdown (protocol_inbuf);
+           buf_free (protocol_inbuf);
+           protocol_inbuf = NULL;
+       }
+       if (stderrbuf)
+       {
+           buf_shutdown (stderrbuf);
+           buf_free (stderrbuf);
+           stderrbuf = NULL;
+       }
+       if (stdoutbuf)
+       {
+           buf_shutdown (stdoutbuf);
+           buf_free (stdoutbuf);
+           stdoutbuf = NULL;
+       }
+       if (err_exit)
+           goto error_exit;
     }
 
     if (errs)
Index: ccvs/src/tag.c
diff -u ccvs/src/tag.c:1.148 ccvs/src/tag.c:1.149
--- ccvs/src/tag.c:1.148        Sat May 20 12:17:32 2006
+++ ccvs/src/tag.c      Fri May 26 19:25:57 2006
@@ -1550,6 +1550,8 @@
     if (is_in_val_tags (&db, name))
     {
        clear_val_tags_lock ();
+       if (db)
+           dbm_close (db);
        return;
     }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]