[pacman-dev] [PATCH] _alpm_delta_parse: free memory on error

Allan McRae allan at archlinux.org
Sun Dec 21 14:12:09 UTC 2014


Signed-off-by: Allan McRae <allan at archlinux.org>
---
 lib/libalpm/delta.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/lib/libalpm/delta.c b/lib/libalpm/delta.c
index 23ca31d..db6bb8e 100644
--- a/lib/libalpm/delta.c
+++ b/lib/libalpm/delta.c
@@ -306,10 +306,10 @@ alpm_delta_t *_alpm_delta_parse(alpm_handle_t *handle, const char *line)
 
 	/* start at index 1 -- match 0 is the entire match */
 	len = pmatch[1].rm_eo - pmatch[1].rm_so;
-	STRNDUP(delta->delta, &line[pmatch[1].rm_so], len, return NULL);
+	STRNDUP(delta->delta, &line[pmatch[1].rm_so], len, goto error);
 
 	len = pmatch[2].rm_eo - pmatch[2].rm_so;
-	STRNDUP(delta->delta_md5, &line[pmatch[2].rm_so], len, return NULL);
+	STRNDUP(delta->delta_md5, &line[pmatch[2].rm_so], len, goto error);
 
 	len = pmatch[3].rm_eo - pmatch[3].rm_so;
 	if(len < sizeof(filesize)) {
@@ -319,12 +319,16 @@ alpm_delta_t *_alpm_delta_parse(alpm_handle_t *handle, const char *line)
 	}
 
 	len = pmatch[4].rm_eo - pmatch[4].rm_so;
-	STRNDUP(delta->from, &line[pmatch[4].rm_so], len, return NULL);
+	STRNDUP(delta->from, &line[pmatch[4].rm_so], len, goto error);
 
 	len = pmatch[5].rm_eo - pmatch[5].rm_so;
-	STRNDUP(delta->to, &line[pmatch[5].rm_so], len, return NULL);
+	STRNDUP(delta->to, &line[pmatch[5].rm_so], len, goto error);
 
 	return delta;
+
+error:
+	_alpm_delta_free(delta);
+	return NULL;
 }
 
 #undef NUM_MATCHES
-- 
2.2.0


More information about the pacman-dev mailing list