From aee0c5d0e3d9cbf0a7d10340ee51e025f7c081c6 Mon Sep 17 00:00:00 2001 From: Christophe Grenier Date: Thu, 15 Mar 2018 10:08:04 +0100 Subject: [PATCH] Avoid variable-length array (vla) --- INFO | 2 +- configure.ac | 7 +++---- src/fat.c | 7 +++++-- src/hpfs.c | 12 ++++++++---- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/INFO b/INFO index 9b239183..d85a196e 100644 --- a/INFO +++ b/INFO @@ -1,2 +1,2 @@ TestDisk & PhotoRec , https://www.cgsecurity.org -Copyright (C) 1998-2017 Christophe GRENIER +Copyright (C) 1998-2018 Christophe GRENIER diff --git a/configure.ac b/configure.ac index e3883ef8..ed25851f 100644 --- a/configure.ac +++ b/configure.ac @@ -6,7 +6,7 @@ AC_INIT([testdisk],[7.1-WIP],[grenier@cgsecurity.org]) AC_LANG(C) sinclude(acx_pthread.m4) sinclude(mkdir.m4) -TESTDISKDATE="February 2018" +TESTDISKDATE="March 2018" AC_SUBST(TESTDISKDATE) AC_DEFINE_UNQUOTED([TESTDISKDATE],"$TESTDISKDATE",[Date of release]) AC_CONFIG_AUX_DIR(config) @@ -623,7 +623,6 @@ if test "x$with_jpeg" != "xno"; then else photorec_LDADD="$photorec_LDADD ${jpeg_lib_a}" qphotorec_LDADD="$qphotorec_LDADD ${jpeg_lib_a}" - fidentify_LDADD="$fidentify_LDADD ${jpeg_lib_a}" fi have_jpeg=yes ],AC_MSG_WARN(No jpeg library detected)) @@ -830,7 +829,7 @@ if test "x$have_ewf" != "xyes"; then fi fi #-Wconversion -Wmissing-noreturn -ffunction-sections -Wl,--gc-sections -Wl,--print-gc-sections -for option in -Wdeclaration-after-statement -Wall -MD -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wshadow -Wwrite-strings -W -Wcast-align -Waggregate-return -Wbad-function-cast -Wcast-qual -Wundef -Wredundant-decls -Wsign-compare -Wnested-externs -Winline -Wdisabled-optimization -Wfloat-equal -Wmissing-format-attribute -Wmultichar -Wc++-compat -Wformat=2 -Wunreachable-code +for option in -Wdeclaration-after-statement -Wall -MD -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wshadow -Wwrite-strings -W -Wcast-align -Waggregate-return -Wbad-function-cast -Wcast-qual -Wundef -Wredundant-decls -Wsign-compare -Wnested-externs -Winline -Wdisabled-optimization -Wfloat-equal -Wmissing-format-attribute -Wmultichar -Wc++-compat -Wformat=2 -Wunreachable-code -Wvla do SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $option" @@ -845,7 +844,7 @@ done unset option AC_LANG_PUSH([C++]) -for option in -Wall -MD -Wpointer-arith -Wmissing-declarations -Wshadow -Wwrite-strings -W -Wcast-align -Wcast-qual -Wundef -Wredundant-decls -Wsign-compare -Wdisabled-optimization -Wmissing-format-attribute -Wmultichar -Wformat=2 -fvisibility=hidden -fvisibility-inlines-hidden -fPIC +for option in -Wall -MD -Wpointer-arith -Wmissing-declarations -Wshadow -Wwrite-strings -W -Wcast-align -Wcast-qual -Wundef -Wredundant-decls -Wsign-compare -Wdisabled-optimization -Wmissing-format-attribute -Wmultichar -Wformat=2 -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -Wvla do SAVE_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $option" diff --git a/src/fat.c b/src/fat.c index 34674bb6..f1f3a654 100644 --- a/src/fat.c +++ b/src/fat.c @@ -910,11 +910,12 @@ static int fat32_set_part_name(disk_t *disk_car, partition_t *partition, const s int check_OS2MB(disk_t *disk, partition_t *partition, const int verbose) { - unsigned char buffer[disk->sector_size]; - if((unsigned)disk->pread(disk, &buffer, disk->sector_size, partition->part_offset) != disk->sector_size) + unsigned char *buffer=(unsigned char *)MALLOC(disk->sector_size); + if((unsigned)disk->pread(disk, buffer, disk->sector_size, partition->part_offset) != disk->sector_size) { screen_buffer_add("check_OS2MB: Read error\n"); log_error("check_OS2MB: Read error\n"); + free(buffer); return 1; } if(test_OS2MB(disk,(const struct fat_boot_sector *)buffer,partition,verbose,0)!=0) @@ -924,9 +925,11 @@ int check_OS2MB(disk_t *disk, partition_t *partition, const int verbose) log_info("\n\ntest_OS2MB()\n"); log_partition(disk, partition); } + free(buffer); return 1; } partition->upart_type=UP_OS2MB; + free(buffer); return 0; } diff --git a/src/hpfs.c b/src/hpfs.c index 093cdbd2..8524491a 100644 --- a/src/hpfs.c +++ b/src/hpfs.c @@ -28,6 +28,9 @@ #ifdef HAVE_STRING_H #include #endif +#ifdef HAVE_STDLIB_H +#include /* free */ +#endif #include "types.h" #include "common.h" #include "fat.h" @@ -83,11 +86,12 @@ int recover_HPFS(disk_t *disk_car, const struct fat_boot_sector *hpfs_header, pa int check_HPFS(disk_t *disk_car,partition_t *partition,const int verbose) { - unsigned char buffer[disk_car->sector_size]; - if((unsigned)disk_car->pread(disk_car, &buffer, disk_car->sector_size, partition->part_offset) != disk_car->sector_size) + unsigned char *buffer=(unsigned char *)MALLOC(disk_car->sector_size); + if((unsigned)disk_car->pread(disk_car, buffer, disk_car->sector_size, partition->part_offset) != disk_car->sector_size) { screen_buffer_add("check_HPFS: Read error\n"); log_error("check_HPFS: Read error\n"); + free(buffer); return 1; } if(test_HPFS(disk_car,(const struct fat_boot_sector *)buffer,partition,verbose,0)!=0) @@ -97,10 +101,10 @@ int check_HPFS(disk_t *disk_car,partition_t *partition,const int verbose) log_info("\n\ntest_HPFS()\n"); log_partition(disk_car,partition); } + free(buffer); return 1; } set_HPFS_info(partition); + free(buffer); return 0; } - -