ソースを参照

Fix a hard-to-trigger memory leak in log_credential status. Found by Coverity scan. CID 349.

svn:r17484
Nick Mathewson 17 年 前
コミット
2be5215181
2 ファイル変更8 行追加6 行削除
  1. 3 0
      ChangeLog
  2. 5 6
      src/common/compat.c

+ 3 - 0
ChangeLog

@@ -34,6 +34,9 @@ Changes in version 0.2.1.8-alpha - 2008-??-??
     - Correct handling of possible malformed authority signing key
       certificates with internal signature types.  Fixes bug 880.
       Bugfix on 0.2.0.3-alpha.
+    - Fix a hard-to-trigger resource leak when logging credential status.
+      CID 349.
+    - 
 
   o Minor features:
     - Report the case where all signatures in a detached set are rejected

+ 5 - 6
src/common/compat.c

@@ -1049,17 +1049,17 @@ log_credential_status(void)
              strerror(errno));
     return -1;
   } else {
-    int i;
+    int i, retval = 0;
     char *strgid;
     char *s = NULL;
-    int formatting_error = 0;
     smartlist_t *elts = smartlist_create();
 
     for (i = 0; i<ngids; i++) {
       strgid = tor_malloc(11);
-      if (tor_snprintf(strgid, 11, "%u", (unsigned)sup_gids[i]) == -1) {
+      if (tor_snprintf(strgid, 11, "%u", (unsigned)sup_gids[i]) < 0) {
         log_warn(LD_GENERAL, "Error printing supplementary GIDs");
-        formatting_error = 1;
+        tor_free(strgid);
+        retval = -1;
         goto error;
       }
       smartlist_add(elts, strgid);
@@ -1077,8 +1077,7 @@ log_credential_status(void)
     });
     smartlist_free(elts);
 
-    if (formatting_error)
-      return -1;
+    return retval;
   }
 #endif