ebecab
From 160c02c8071b8948231a229ec6247cf0792c389a Mon Sep 17 00:00:00 2001
ebecab
From: Filip Krska <fkrska@redhat.com>
ebecab
Date: Tue, 20 Oct 2015 18:25:38 +0200
ebecab
Subject: [PATCH 1/2] lex.c: fix malloc() signal leak in lexsave()
ebecab
ebecab
The bug appears not to affect upstream master, where the function
ebecab
ebecab
lexsave(void)
ebecab
 ... 1x malloc, 1x zalloc
ebecab
ebecab
was rewritten to
ebecab
ebecab
lex_context_save(struct lex_stack *ls, int toplevel)
ebecab
  ... no *alloc at all
ebecab
ebecab
Recheck of any possible malloc() signal leaks in current RHEL 6 zsh code needed.
ebecab
---
ebecab
 Src/lex.c | 2 +-
ebecab
 1 file changed, 1 insertion(+), 1 deletion(-)
ebecab
ebecab
diff --git a/Src/lex.c b/Src/lex.c
ebecab
index 33f6430..0c7f539 100644
ebecab
--- a/Src/lex.c
ebecab
+++ b/Src/lex.c
c6dbd9
@@ -271,7 +271,7 @@ lexsave_partial(int parts)
ebecab
 {
ebecab
     struct lexstack *ls;
ebecab
 
ebecab
-    ls = (struct lexstack *)malloc(sizeof(struct lexstack));
ebecab
+    ls = (struct lexstack *)zalloc(sizeof(struct lexstack));
ebecab
 
ebecab
     if (parts & ZCONTEXT_LEX) {
ebecab
 	ls->incmdpos = incmdpos;
ebecab
-- 
ebecab
2.5.2
ebecab
ebecab
ebecab
From 861e4cd5f8ba169f5f63ca1efffdc8ebac5a3d61 Mon Sep 17 00:00:00 2001
ebecab
From: Kamil Dudka <kdudka@redhat.com>
ebecab
Date: Tue, 20 Oct 2015 18:27:15 +0200
ebecab
Subject: [PATCH 2/2] mem.c: queue signals while calling malloc() in realloc()
ebecab
ebecab
Bug: https://bugzilla.redhat.com/1267903#c6
ebecab
---
ebecab
 Src/mem.c | 9 +++++++--
ebecab
 1 file changed, 7 insertions(+), 2 deletions(-)
ebecab
ebecab
diff --git a/Src/mem.c b/Src/mem.c
ebecab
index 9492a60..75622c6 100644
ebecab
--- a/Src/mem.c
ebecab
+++ b/Src/mem.c
ebecab
@@ -1513,8 +1513,13 @@ realloc(MALLOC_RET_T p, MALLOC_ARG_T size)
ebecab
     int i, l = 0;
ebecab
 
ebecab
     /* some system..., see above */
ebecab
-    if (!p && size)
ebecab
-	return (MALLOC_RET_T) malloc(size);
ebecab
+    if (!p && size) {
ebecab
+	queue_signals();
ebecab
+	r = malloc(size);
ebecab
+	unqueue_signals();
ebecab
+	return (MALLOC_RET_T) r;
ebecab
+    }
ebecab
+
ebecab
     /* and some systems even do this... */
ebecab
     if (!p || !size)
ebecab
 	return (MALLOC_RET_T) p;
ebecab
-- 
ebecab
2.5.2
ebecab