瀏覽代碼

dpkg: Fix file descriptor leaks in diversions and statoverride databases

Regression introduced in commit ab56d08abe274182c0cab03425610ae61a074eff,
while too eagerly removing fclose() calls.

Closes: #734783
Guillem Jover 12 年之前
父節點
當前提交
0b583bfec3
共有 3 個文件被更改,包括 8 次插入6 次删除
  1. 2 0
      debian/changelog
  2. 3 3
      src/divertdb.c
  3. 3 3
      src/statdb.c

+ 2 - 0
debian/changelog

@@ -47,6 +47,8 @@ dpkg (1.17.6) UNRELEASED; urgency=low
     (control.tar) or compressed with xz (control.tar.xz).
   * Add support for creating uniformly compressed .deb archive members,
     with the new dpkg-deb option --uniform-compression.
+  * Fix file descriptor leaks in diversions and statoverride databases.
+    Closes: #734783
 
   [ Updated dpkg translations ]
   * Swedish (Peter Krefting).

+ 3 - 3
src/divertdb.c

@@ -78,15 +78,15 @@ ensure_diversions(void)
 		if (file_prev &&
 		    sb_prev.st_dev == sb_next.st_dev &&
 		    sb_prev.st_ino == sb_next.st_ino) {
+			fclose(file);
 			onerr_abort--;
 			debug(dbg_general, "%s: same, skipping", __func__);
 			return;
 		}
 		sb_prev = sb_next;
-
-		if (file_prev)
-			fclose(file_prev);
 	}
+	if (file_prev)
+		fclose(file_prev);
 	file_prev = file;
 
 	for (ov = diversions; ov; ov = ov->next) {

+ 3 - 3
src/statdb.c

@@ -144,15 +144,15 @@ ensure_statoverrides(void)
 		if (file_prev &&
 		    sb_prev.st_dev == sb_next.st_dev &&
 		    sb_prev.st_ino == sb_next.st_ino) {
+			fclose(file);
 			onerr_abort--;
 			debug(dbg_general, "%s: same, skipping", __func__);
 			return;
 		}
 		sb_prev = sb_next;
-
-		if (file_prev)
-			fclose(file_prev);
 	}
+	if (file_prev)
+		fclose(file_prev);
 	file_prev = file;
 
 	/* Reset statoverride information. */