[git commit] md5/sha1sum: better fix for small resource leak

Denys Vlasenko vda.linux at googlemail.com
Sat Apr 16 16:56:36 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=43a3d50e14902e746ee53b7cfb63fe190bd5387f
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/md5_sha1_sum.c |   25 +++++++++++--------------
 1 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c
index 8270d97..050d467 100644
--- a/coreutils/md5_sha1_sum.c
+++ b/coreutils/md5_sha1_sum.c
@@ -100,22 +100,18 @@ static uint8_t *hash_file(const char *filename)
 		md5_ctx_t md5;
 	} context;
 	uint8_t *hash_value = NULL;
-	RESERVE_CONFIG_UBUFFER(in_buf, 4096);
 	void FAST_FUNC (*update)(void*, const void*, size_t);
 	void FAST_FUNC (*final)(void*, void*);
 	char hash_algo;
 
 	src_fd = open_or_warn_stdin(filename);
 	if (src_fd < 0) {
-		if (ENABLE_FEATURE_CLEAN_UP) {
-			RELEASE_CONFIG_BUFFER(in_buf);
-		}
 		return NULL;
 	}
 
 	hash_algo = applet_name[3];
 
-	/* figure specific hash algorithims */
+	/* figure specific hash algorithms */
 	if (ENABLE_MD5SUM && hash_algo == HASH_MD5) {
 		md5_begin(&context.md5);
 		update = (void*)md5_hash;
@@ -140,17 +136,18 @@ static uint8_t *hash_file(const char *filename)
 		xfunc_die(); /* can't reach this */
 	}
 
-	while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
-		update(&context, in_buf, count);
-	}
-
-	if (count == 0) {
-		final(&context, in_buf);
-		hash_value = hash_bin_to_hex(in_buf, hash_len);
+	{
+		RESERVE_CONFIG_UBUFFER(in_buf, 4096);
+		while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
+			update(&context, in_buf, count);
+		}
+		if (count == 0) {
+			final(&context, in_buf);
+			hash_value = hash_bin_to_hex(in_buf, hash_len);
+		}
+		RELEASE_CONFIG_BUFFER(in_buf);
 	}
 
-	RELEASE_CONFIG_BUFFER(in_buf);
-
 	if (src_fd != STDIN_FILENO) {
 		close(src_fd);
 	}
-- 
1.7.3.4



More information about the busybox-cvs mailing list