[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Cvs-cvs] ccvs/src ChangeLog rcs.c,
Derek Robert Price <=