[tor-commits] [tor/master] Fixes when applying diffs: Allow 2-line diffs, fix bogus free

nickm at torproject.org nickm at torproject.org
Thu Mar 16 19:01:08 UTC 2017


commit 5766eed38f3fbf150691bcae84d82a1c16dbeb48
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Mar 7 11:35:50 2017 -0500

    Fixes when applying diffs: Allow 2-line diffs, fix bogus free
    
    The 2-line diff changs is needed to make the unit tests actually
    test the cases that they thought they were testing.
    
    The bogus free was found while testing those cases
---
 src/or/consdiff.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/or/consdiff.c b/src/or/consdiff.c
index ed20e3b..defa1cf 100644
--- a/src/or/consdiff.c
+++ b/src/or/consdiff.c
@@ -859,7 +859,7 @@ consdiff_get_digests(smartlist_t *diff,
   const char *format;
   char cons1_hash[DIGEST256_LEN], cons2_hash[DIGEST256_LEN];
   char *cons1_hash_hex, *cons2_hash_hex;
-  if (smartlist_len(diff) < 3) {
+  if (smartlist_len(diff) < 2) {
     log_info(LD_CONSDIFF, "The provided consensus diff is too short.");
     goto error_cleanup;
   }
@@ -986,8 +986,6 @@ consdiff_apply_diff(smartlist_t *cons1, smartlist_t *diff,
   }
 
   cons2_str = smartlist_join_strings(cons2, "\n", 1, NULL);
-  SMARTLIST_FOREACH(cons2, char *, cp, tor_free(cp));
-  smartlist_free(cons2);
 
   common_digests_t cons2_digests;
   if (router_get_networkstatus_v3_hashes(cons2_str,
@@ -1014,18 +1012,17 @@ consdiff_apply_diff(smartlist_t *cons1, smartlist_t *diff,
     goto error_cleanup;
   }
 
-  return cons2_str;
+  goto done;
 
-  error_cleanup:
+ error_cleanup:
+  tor_free(cons2_str); /* Sets it to NULL */
 
+ done:
   if (cons2) {
     SMARTLIST_FOREACH(cons2, char *, cp, tor_free(cp));
     smartlist_free(cons2);
   }
-  if (cons2_str) {
-    tor_free(cons2_str);
-  }
 
-  return NULL;
+  return cons2_str;
 }
 





More information about the tor-commits mailing list