[pacman-dev] [PATCH] ensure realloc has a positive size

Andrew Gregory andrew.gregory.8 at gmail.com
Mon Nov 2 01:41:55 UTC 2015


If given size 0 POSIX allows realloc to return a pointer that is not
suitable for use.

Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
---
 lib/libalpm/be_local.c | 10 +++++++---
 lib/libalpm/be_sync.c  | 10 +++++++---
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c
index 556157d..e35fc0e 100644
--- a/lib/libalpm/be_local.c
+++ b/lib/libalpm/be_local.c
@@ -810,9 +810,13 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t inforeq)
 					files_count++;
 				}
 				/* attempt to hand back any memory we don't need */
-				files = realloc(files, sizeof(alpm_file_t) * files_count);
-				/* make sure the list is sorted */
-				qsort(files, files_count, sizeof(alpm_file_t), _alpm_files_cmp);
+				if(files_count > 0) {
+					files = realloc(files, sizeof(alpm_file_t) * files_count);
+					/* make sure the list is sorted */
+					qsort(files, files_count, sizeof(alpm_file_t), _alpm_files_cmp);
+				} else {
+					FREE(files);
+				}
 				info->files.count = files_count;
 				info->files.files = files;
 			} else if(strcmp(line, "%BACKUP%") == 0) {
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index 25c8cbe..b09b060 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -721,9 +721,13 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
 					files_count++;
 				}
 				/* attempt to hand back any memory we don't need */
-				files = realloc(files, sizeof(alpm_file_t) * files_count);
-				/* make sure the list is sorted */
-				qsort(files, files_count, sizeof(alpm_file_t), _alpm_files_cmp);
+				if(files_count > 0) {
+					files = realloc(files, sizeof(alpm_file_t) * files_count);
+					/* make sure the list is sorted */
+					qsort(files, files_count, sizeof(alpm_file_t), _alpm_files_cmp);
+				} else {
+					FREE(files);
+				}
 				pkg->files.count = files_count;
 				pkg->files.files = files;
 			}
-- 
2.6.2


More information about the pacman-dev mailing list