diff --git a/src/cc65/litpool.c b/src/cc65/litpool.c index 6d8827c60..381073d23 100644 --- a/src/cc65/litpool.c +++ b/src/cc65/litpool.c @@ -470,6 +470,7 @@ Literal* AddLiteral (const char* S) { StrBuf SB; SB_InitFromString(&SB, S); + SB_AppendChar(&SB, '\0'); return AddLiteralStr(&SB); } diff --git a/test/val/bug2920.c b/test/val/bug2920.c new file mode 100644 index 000000000..4267c0a76 --- /dev/null +++ b/test/val/bug2920.c @@ -0,0 +1,20 @@ +#include "unittest.h" + +TEST { + /* The bug causes __func__ to be not null terminated. */ + const char *f = __func__; + size_t size = sizeof(__func__); + size_t i; + + /* Ensure the size is correct (5 for "main" + null terminator) */ + ASSERT_AreEqual((unsigned)size, 5u, "%u", "Sizeof __func__ should be 5"); + + /* Check content */ + for (i = 0; i < size - 1; ++i) { + ASSERT_AreEqual(f[i], "main"[i], "%c", "Character mismatch"); + } + + /* Check null terminator specifically */ + ASSERT_AreEqual(f[size - 1], '\0', "%02X", "Null terminator missing"); +} +ENDTEST