cvs-cvs
[Top][All Lists]
Advanced

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

[Cvs-cvs] ccvs/src ChangeLog rcs.c


From: Derek Robert Price
Subject: [Cvs-cvs] ccvs/src ChangeLog rcs.c
Date: Tue, 25 Apr 2006 14:02:15 +0000

CVSROOT:        /cvsroot/cvs
Module name:    ccvs
Branch:         
Changes by:     Derek Robert Price <address@hidden>     06/04/25 14:02:15

Modified files:
        src            : ChangeLog rcs.c 

Log message:
        * rcs.c (RCS_delete_openpgp_signatures): Avoid double-free.  Add
        comments.  Clarify traces.
        (Report from Mark D. Baushke  <address@hidden>.)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/ChangeLog.diff?tr1=1.3377&tr2=1.3378&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/rcs.c.diff?tr1=1.362&tr2=1.363&r1=text&r2=text

Patches:
Index: ccvs/src/ChangeLog
diff -u ccvs/src/ChangeLog:1.3377 ccvs/src/ChangeLog:1.3378
--- ccvs/src/ChangeLog:1.3377   Tue Apr 25 05:35:05 2006
+++ ccvs/src/ChangeLog  Tue Apr 25 14:02:13 2006
@@ -1,3 +1,9 @@
+2006-04-25  Derek Price  <address@hidden>
+
+       * rcs.c (RCS_delete_openpgp_signatures): Avoid double-free.  Add
+       comments.  Clarify traces.
+       (Report from Mark D. Baushke  <address@hidden>.)
+
 2006-04-24  Mark D. Baushke  <address@hidden>
 
        * sanity.sh ($bases): Do not assume 'export VAR=value'
Index: ccvs/src/rcs.c
diff -u ccvs/src/rcs.c:1.362 ccvs/src/rcs.c:1.363
--- ccvs/src/rcs.c:1.362        Mon Apr 24 18:50:27 2006
+++ ccvs/src/rcs.c      Tue Apr 25 14:02:14 2006
@@ -4916,6 +4916,9 @@
 
 
 
+/* Delete OpenPGP signature(s) identified by KEYID from revision REV in the RCS
+ * archive attached to FINFO.
+ */
 int
 RCS_delete_openpgp_signatures (struct file_info *finfo, const char *rev,
                               uint32_t keyid)
@@ -4937,11 +4940,13 @@
     if (finfo->rcs->flags & PARTIAL)
        RCS_reparsercsfile (finfo->rcs, NULL, NULL);
 
+    /* Find the revision.  */
     n = findnode (finfo->rcs->versions, rev);
     if (!n)
        error (1, 0, "internal error: no revision information for %s", rev);
     vers = n->data;
 
+    /* Find the OpenPGP signatures data.  */
     n = findnode (vers->other_delta, "openpgp-signatures");
     if (!n)
     {
@@ -4954,16 +4959,20 @@
           "RCS_delete_openpgp_signatures: found oldsigs = %s, len = %u",
           (char *)n->data, (unsigned int)n->len);
 
+    /* Decode the base64 encoded signature(s).  */
     if (!base64_decode_alloc (n->data, n->len, &oldsigs, &oldlen))
        error (1, 0, "Invalid binhex data in signature (`%s', rev %s)",
               finfo->rcs->print_path, rev);
     if (!oldsigs)
        xalloc_die ();
-    free (n->data);
 
+    /* Store the signature(s) in a memory buffer for the parsing routines.  */
     membuf = buf_nonio_initialize (NULL);
     buf_output (membuf, oldsigs, oldlen);
 
+    /* Find the signature(s), copying signatures that *do not* match to a new
+     * string.
+     */
     while (!(rc = parse_signature (membuf, &sig)))
     {
        char *hexid1 = Xasprintf ("0x%llx", (unsigned long long) keyid);
@@ -4998,17 +5007,25 @@
 
     if (newsigs)
     {
+       /* Replace the old signature data with the new.  */
+       free (n->data);
        n->len = base64_encode_alloc (newsigs, newlen, (char **)&n->data);
        free (newsigs);
+
+       TRACE (TRACE_DATA,
+              "RCS_add_openpgp_signature: wrote newsigs = %s, len = %u",
+              (char *)n->data, (unsigned int)n->len);
     }
     else
+    {
+       /* No signatures left.  Delete the OpenPGP node.  */
        delnode (n);
 
+       TRACE (TRACE_DATA,
+              "RCS_add_openpgp_signature: deleted all signature data");
+    }
 
-    TRACE (TRACE_DATA,
-          "RCS_add_openpgp_signature: found oldsigs = %s, len = %u",
-          (char *)n->data, (unsigned int)n->len);
-
+    /* Rewrite the RCS file.  */
     RCS_rewrite (finfo->rcs, NULL, NULL);
 
     return 0;




reply via email to

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