|
|
f686d7 |
From d2f33b7005540aef5ce79479d598cdcc10d397f9 Mon Sep 17 00:00:00 2001
|
|
|
f686d7 |
From: "Barton E. Schaefer" <schaefer@zsh.org>
|
|
|
f686d7 |
Date: Thu, 24 Jul 2014 08:45:16 -0700
|
|
|
f686d7 |
Subject: [PATCH] 32853: redefine VARARR() to use heap rather than stack
|
|
|
f686d7 |
allocation
|
|
|
f686d7 |
|
|
|
f686d7 |
Upstream-commit: 2f0efe9f592255d0d83c0929423cc397bb1ebfa4
|
|
|
f686d7 |
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
|
|
f686d7 |
---
|
|
|
f686d7 |
Src/mem.c | 5 ++++-
|
|
|
f686d7 |
Src/zsh_system.h | 5 +++++
|
|
|
f686d7 |
2 files changed, 9 insertions(+), 1 deletion(-)
|
|
|
f686d7 |
|
|
|
f686d7 |
diff --git a/Src/mem.c b/Src/mem.c
|
|
|
f686d7 |
index 5275c6c..c4745a5 100644
|
|
|
f686d7 |
--- a/Src/mem.c
|
|
|
f686d7 |
+++ b/Src/mem.c
|
|
|
f686d7 |
@@ -856,7 +856,10 @@ zrealloc(void *ptr, size_t size)
|
|
|
f686d7 |
ptr = NULL;
|
|
|
f686d7 |
} else {
|
|
|
f686d7 |
/* If ptr is NULL, then behave like malloc */
|
|
|
f686d7 |
- ptr = malloc(size);
|
|
|
f686d7 |
+ if (!(ptr = (void *) malloc(size))) {
|
|
|
f686d7 |
+ zerr("fatal error: out of memory");
|
|
|
f686d7 |
+ exit(1);
|
|
|
f686d7 |
+ }
|
|
|
f686d7 |
}
|
|
|
f686d7 |
unqueue_signals();
|
|
|
f686d7 |
|
|
|
f686d7 |
diff --git a/Src/zsh_system.h b/Src/zsh_system.h
|
|
|
f686d7 |
index f385330..427c25f 100644
|
|
|
f686d7 |
--- a/Src/zsh_system.h
|
|
|
f686d7 |
+++ b/Src/zsh_system.h
|
|
|
f686d7 |
@@ -286,11 +286,16 @@ struct timezone {
|
|
|
f686d7 |
# include <limits.h>
|
|
|
f686d7 |
#endif
|
|
|
f686d7 |
|
|
|
f686d7 |
+#ifdef USE_STACK_ALLOCATION
|
|
|
f686d7 |
+#warning compiling with USE_STACK_ALLOCATION
|
|
|
f686d7 |
#ifdef HAVE_VARIABLE_LENGTH_ARRAYS
|
|
|
f686d7 |
# define VARARR(X,Y,Z) X (Y)[Z]
|
|
|
f686d7 |
#else
|
|
|
f686d7 |
# define VARARR(X,Y,Z) X *(Y) = (X *) alloca(sizeof(X) * (Z))
|
|
|
f686d7 |
#endif
|
|
|
f686d7 |
+#else
|
|
|
f686d7 |
+# define VARARR(X,Y,Z) X *(Y) = (X *) zhalloc(sizeof(X) * (Z))
|
|
|
f686d7 |
+#endif
|
|
|
f686d7 |
|
|
|
f686d7 |
/* we should handle unlimited sizes from pathconf(_PC_PATH_MAX) */
|
|
|
f686d7 |
/* but this is too much trouble */
|
|
|
f686d7 |
--
|
|
|
f686d7 |
2.1.0
|
|
|
f686d7 |
|