d35ea2
From 981fbfc16220a15e72457d8ece4e014988746946 Mon Sep 17 00:00:00 2001
d35ea2
From: Karl Williamson <khw@cpan.org>
d35ea2
Date: Thu, 12 Mar 2020 12:48:47 -0600
d35ea2
Subject: [PATCH] reentr.c: Prevent infinite looping
d35ea2
MIME-Version: 1.0
d35ea2
Content-Type: text/plain; charset=UTF-8
d35ea2
Content-Transfer-Encoding: 8bit
d35ea2
d35ea2
This is an easy, though  paranoid hedge to prevent something that should
d35ea2
never happen from causing an infinite loop if it were to happen.
d35ea2
d35ea2
Signed-off-by: Petr Písař <ppisar@redhat.com>
d35ea2
---
d35ea2
 reentr.c        | 2 +-
d35ea2
 regen/reentr.pl | 2 +-
d35ea2
 2 files changed, 2 insertions(+), 2 deletions(-)
d35ea2
d35ea2
diff --git a/reentr.c b/reentr.c
d35ea2
index 8438c8f90f..2429aa2f5d 100644
d35ea2
--- a/reentr.c
d35ea2
+++ b/reentr.c
d35ea2
@@ -36,7 +36,7 @@
d35ea2
 
d35ea2
 #define RenewDouble(data_pointer, size_pointer, type) \
d35ea2
     STMT_START { \
d35ea2
-	const size_t size = *(size_pointer) * 2; \
d35ea2
+	const size_t size = MAX(*(size_pointer), 1) * 2; \
d35ea2
 	Renew((data_pointer), (size), type); \
d35ea2
 	*(size_pointer) = size; \
d35ea2
     } STMT_END
d35ea2
diff --git a/regen/reentr.pl b/regen/reentr.pl
d35ea2
index 94721e9dec..ba2e1c8fa6 100644
d35ea2
--- a/regen/reentr.pl
d35ea2
+++ b/regen/reentr.pl
d35ea2
@@ -818,7 +818,7 @@ print $c <<"EOF";
d35ea2
 
d35ea2
 #define RenewDouble(data_pointer, size_pointer, type) \\
d35ea2
     STMT_START { \\
d35ea2
-	const size_t size = *(size_pointer) * 2; \\
d35ea2
+	const size_t size = MAX(*(size_pointer), 1) * 2; \\
d35ea2
 	Renew((data_pointer), (size), type); \\
d35ea2
 	*(size_pointer) = size; \\
d35ea2
     } STMT_END
d35ea2
-- 
d35ea2
2.25.4
d35ea2