File 0426-tools-Terminate-on-ENOMEM-in-erl_memory.c.patch of Package erlang

From 22ce7a73bf8d3d405c4e68b05aa674b28327a307 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Wed, 10 Feb 2021 17:57:20 +0100
Subject: [PATCH 26/34] tools: Terminate on ENOMEM in erl_memory.c

CodeChecker complains about deref NULL pointer.

I see no point in trying to salvage ENOMEM in this case.
---
 lib/tools/c_src/erl_memory.c | 21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/lib/tools/c_src/erl_memory.c b/lib/tools/c_src/erl_memory.c
index 2726d7b81e..f247e6568d 100644
--- a/lib/tools/c_src/erl_memory.c
+++ b/lib/tools/c_src/erl_memory.c
@@ -464,10 +464,10 @@ enqueue(em_state *state, em_buf_queue *queue, size_t min_size)
 	buf = (em_buffer *) (*state->alloc)(sizeof(em_buffer)
 					    + (sizeof(char)
 					       * (bsize-EM_DEFAULT_BUF_SZ)));
-	if (buf) {
-	    buf->size = bsize;
-	    reset_buffer(buf, bsize);
-	}
+        if (!buf)
+            error(ENOMEM);
+        buf->size = bsize;
+        reset_buffer(buf, bsize);
     }
 
     if (queue->last) {
@@ -568,15 +568,10 @@ get_next_write_area(em_area *area, em_state *state, em_buf_queue *queue,
 	   ? queue->last
 	   : enqueue(state, queue, size));
 
-    if (buf) {
-	ASSERT(buf->end - buf->data_end >= size);
-	area->ptr = buf->data_end;
-	area->size = buf->end - buf->data_end;
-    }
-    else {
-	area->ptr = NULL;
-	area->size = 0;
-    }
+    ASSERT(buf);
+    ASSERT(buf->end - buf->data_end >= size);
+    area->ptr = buf->data_end;
+    area->size = buf->end - buf->data_end;
 
     if (queue->tot_buf_size > queue->max_buf_size) {
 	fprintf(stderr,
-- 
2.26.2

openSUSE Build Service is sponsored by