Skip to content

Commit 076c1bd

Browse files
committed
Fixed crash in CheckVaarg::va_start_argument (danmar#6032)
1 parent b708022 commit 076c1bd

2 files changed

Lines changed: 10 additions & 1 deletion

File tree

lib/checkvaarg.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void CheckVaarg::va_start_argument()
4444
const Variable* var = param2->variable();
4545
if (var && var->isReference())
4646
referenceAs_va_start_error(param2, var->name());
47-
if (var->index() + 2 < function->argCount() && _settings->isEnabled("warning")) {
47+
if (var && var->index() + 2 < function->argCount() && _settings->isEnabled("warning")) {
4848
std::list<Variable>::const_reverse_iterator it = function->argumentList.rbegin();
4949
++it;
5050
wrongParameterTo_va_start_error(tok, var->name(), it->name());

test/testvaarg.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,15 @@ class TestVaarg : public TestFixture {
7474
" va_end(arg_ptr);\n"
7575
"}");
7676
ASSERT_EQUALS("", errout.str());
77+
78+
check("int main(int argc, char *argv[]) {\n"
79+
" long(^addthem)(const char *, ...) = ^long(const char *format, ...) {\n"
80+
" va_list argp;\n"
81+
" va_start(argp, format);\n"
82+
" c = va_arg(argp, int);\n"
83+
" };\n"
84+
"}"); // Don't crash (#6032)
85+
ASSERT_EQUALS("[test.cpp:6]: (error) va_list 'argp' was opened but not closed by va_end().\n", errout.str());
7786
}
7887

7988
void referenceAs_va_start() {

0 commit comments

Comments
 (0)