From 93c774d482694643cafbc82578ac8b729fb5bc8b Mon Sep 17 00:00:00 2001
From: Cyrill Gorcunov <gorcunov@gmail.com>
Date: Wed, 4 Nov 2020 13:08:06 +0300
Subject: [PATCH] BR3392637: output/outieee: Fix nil dereference

The handling been broken in commit 98578071.

Upstream-Status: Backport [https://github.com/netwide-assembler/nasm/commit/93c774d482694643cafbc82578ac8b729fb5bc8b]

CVE: CVE-2020-21528

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Archana Polampalli <archana.polampalli@windriver.com>
---
 output/outieee.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/output/outieee.c b/output/outieee.c
index bff2f085..b3ccc5f6 100644
--- a/output/outieee.c
+++ b/output/outieee.c
@@ -795,6 +795,23 @@ static int32_t ieee_segment(char *name, int *bits)
             define_label(name, seg->index + 1, 0L, false);
         ieee_seg_needs_update = NULL;

+        /*
+         * In commit 98578071b9d71ecaa2344dd9c185237c1765041e
+         * we reworked labels significantly which in turn lead
+         * to the case where seg->name = NULL here and we get
+         * nil dereference in next segments definitions.
+         *
+         * Lets placate this case with explicit name setting
+         * if labels engine didn't set it yet.
+         *
+         * FIXME: Need to revisit this moment if such fix doesn't
+         * break anything but since IEEE 695 format is veeery
+         * old I don't expect there are many users left. In worst
+         * case this should only lead to a memory leak.
+         */
+        if (!seg->name)
+            seg->name = nasm_strdup(name);
+
         if (seg->use32)
             *bits = 32;
         else
--
2.40.0
