From 1c01a5bc9ac7f8aaa484b1a8e0e74aa5f8899d0e Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 8 Nov 2020 11:17:59 -0800
Subject: [PATCH] malloc: Check for excessive values to malloc

with whole program optimizers like lto smalloc()
is inlined the excessive constant argument is propagated to
malloc() and ultimately triggers the warning.

malloc.c:15:9: error: argument 1 range [18446744065119617024, 18446744073709551580] exceeds maximum object size 9223372036854775807 [-Werror=alloc-size-larger-than=]

therefore add a check before excessive constant argument before calling
malloc

Note that this will not happen with normal compile since they happen to
be in different translation units and compiler can not semantically
analyze as much

Upstream-Status: Pending

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 malloc.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/malloc.c b/malloc.c
index a7fa7c5..520377c 100644
--- a/malloc.c
+++ b/malloc.c
@@ -2,6 +2,7 @@
  * malloc.c: safe wrappers around malloc, realloc, free, strdup
  */
 
+#include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
 #include "puzzles.h"
@@ -12,6 +13,8 @@
  */
 void *smalloc(size_t size) {
     void *p;
+    if (size > PTRDIFF_MAX)
+	fatal("exceeds maximum object size");
     p = malloc(size);
     if (!p)
 	fatal("out of memory");
-- 
2.29.2

