From a65988798c26a317aa1dbe5f6274adcad13c14e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Csaba=20Osztrogon=C3=A1c?= Date: Thu, 22 Oct 2020 09:05:51 +0200 Subject: [PATCH] Uncontrolled memory allocation in jerry_port_read_source function (#4282) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit jerry_port_read_source should exit with error message if its parameter is a directory and not a regular file. Fixes #4251. JerryScript-DCO-1.0-Signed-off-by: Csaba Osztrogonác csaba.osztrogonac@h-lab.eu --- jerry-port/default/default-module.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/jerry-port/default/default-module.c b/jerry-port/default/default-module.c index 8fab44787..10a102c08 100644 --- a/jerry-port/default/default-module.c +++ b/jerry-port/default/default-module.c @@ -20,10 +20,15 @@ #include #include #include +#include #include "jerryscript-port.h" #include "jerryscript-port-default.h" +#ifndef S_ISDIR +#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#endif + /** * Determines the size of the given file. * @return size of the file @@ -46,6 +51,13 @@ uint8_t * jerry_port_read_source (const char *file_name_p, /**< file name */ size_t *out_size_p) /**< [out] read bytes */ { + struct stat stat_buffer; + if (stat (file_name_p, &stat_buffer) == -1 || S_ISDIR (stat_buffer.st_mode)) + { + jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Error: Failed to open file: %s\n", file_name_p); + return NULL; + } + FILE *file_p = fopen (file_name_p, "rb"); if (file_p == NULL)