diff mbox series

archive_handler: fix coverity #292186

Message ID 20200415123718.18491-1-sbabic@denx.de
State Accepted
Headers show
Series archive_handler: fix coverity #292186 | expand

Commit Message

Stefano Babic April 15, 2020, 12:37 p.m. UTC
Signed-off-by: Stefano Babic <sbabic@denx.de>
---
 handlers/archive_handler.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/handlers/archive_handler.c b/handlers/archive_handler.c
index 3725f9f..6c03ca3 100644
--- a/handlers/archive_handler.c
+++ b/handlers/archive_handler.c
@@ -81,6 +81,7 @@  extract(void *p)
 	struct extract_data *data = (struct extract_data *)p;
 	flags = data->flags;
 	int exitval = -EFAULT;
+	char *FIFO = NULL;
 
 #ifdef CONFIG_LOCALE
 	/*
@@ -123,8 +124,13 @@  extract(void *p)
 	 * Enabling bzip2 is more expensive because the libbz2 library
 	 * isn't very well factored.
 	 */
-	char* FIFO = alloca(strlen(get_tmpdir())+strlen(FIFO_FILE_NAME)+1);
-	sprintf(FIFO, "%s%s", get_tmpdir(), FIFO_FILE_NAME);
+	if  (asprintf(&FIFO, "%s%s", get_tmpdir(), FIFO_FILE_NAME) ==
+		ENOMEM_ASPRINTF) {
+		ERROR("Path too long: %s", get_tmpdir());
+		exitval = -ENOMEM;
+		goto out;
+	}
+
 	if ((r = archive_read_open_filename(a, FIFO, 4096))) {
 		ERROR("archive_read_open_filename(): %s %d",
 		    archive_error_string(a), r);
@@ -176,6 +182,8 @@  out:
 		archive_read_free(a);
 	}
 
+	free(FIFO);
+
 #ifdef CONFIG_LOCALE
 	uselocale(old_locale);
 #endif