Parcourir la source

Fix two bugs found by Coverity scan.

One was a simple buffer overrun; the other was a high-speed pointer
collision.  Both were introduced by my microdescs branch.
Nick Mathewson il y a 14 ans
Parent
commit
afc76a4e71
2 fichiers modifiés avec 6 ajouts et 6 suppressions
  1. 5 5
      src/common/container.c
  2. 1 1
      src/or/dirvote.c

+ 5 - 5
src/common/container.c

@@ -470,26 +470,26 @@ smartlist_get_most_frequent(const smartlist_t *sl,
   const void *most_frequent = NULL;
   int most_frequent_count = 0;
 
-  const void **cur = NULL;
+  const void *cur = NULL;
   int i, count=0;
 
   if (!sl->num_used)
     return NULL;
   for (i = 0; i < sl->num_used; ++i) {
     const void *item = sl->list[i];
-    if (cur && 0 == compare(cur, &item)) {
+    if (cur && 0 == compare(&cur, &item)) {
       ++count;
     } else {
       if (cur && count >= most_frequent_count) {
-        most_frequent = *cur;
+        most_frequent = cur;
         most_frequent_count = count;
       }
-      cur = &item;
+      cur = item;
       count = 1;
     }
   }
   if (cur && count >= most_frequent_count) {
-    most_frequent = *cur;
+    most_frequent = cur;
     most_frequent_count = count;
   }
   return (void*)most_frequent;

+ 1 - 1
src/or/dirvote.c

@@ -2794,7 +2794,7 @@ ssize_t
 dirvote_format_microdesc_vote_line(char *out, size_t out_len,
                                    const microdesc_t *md)
 {
-  char d64[BASE64_DIGEST256_LEN];
+  char d64[BASE64_DIGEST256_LEN+1];
   if (!microdesc_consensus_methods) {
     microdesc_consensus_methods =
       make_consensus_method_list(MIN_METHOD_FOR_MICRODESC,