From 3976f9c751d37ed76d7a31acc80a58f0f56f755a Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Mon, 29 Jun 2026 19:19:02 +0200 Subject: [PATCH] Fix #14876 Nullptr dereference in usingMatch() --- lib/tokenize.cpp | 3 +++ test/testsimplifyusing.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 7379957804f..4167aa71cec 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2720,6 +2720,9 @@ namespace { return false; } + if (!tok->tokAt(-1)) + return false; + // skip other using with this name if (tok1->strAt(-1) == "using") { // fixme: this is wrong diff --git a/test/testsimplifyusing.cpp b/test/testsimplifyusing.cpp index 7359613510f..d0f40dce372 100644 --- a/test/testsimplifyusing.cpp +++ b/test/testsimplifyusing.cpp @@ -77,6 +77,7 @@ class TestSimplifyUsing : public TestFixture { TEST_CASE(simplifyUsing37); TEST_CASE(simplifyUsing38); TEST_CASE(simplifyUsing39); + TEST_CASE(simplifyUsing40); TEST_CASE(simplifyUsing8970); TEST_CASE(simplifyUsing8971); @@ -939,6 +940,13 @@ class TestSimplifyUsing : public TestFixture { ASSERT_EQUALS("", errout_str()); } + void simplifyUsing40() { + const char code[] = "uint8_t f();\n" // #14876 + "using ::std::uint8_t;"; + const char expected[] = "uint8_t f ( ) ;"; + ASSERT_EQUALS(expected, tok(code)); + } + void simplifyUsing8970() { const char code[] = "using V = std::vector;\n" "struct A {\n"