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