File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -2503,7 +2503,12 @@ bool Variable::isMember() const {
25032503
25042504bool Variable::isPointerArray () const
25052505{
2506- return isArray () && nameToken () && nameToken ()->previous () && (nameToken ()->strAt (-1 ) == " *" );
2506+ if (!isArray ())
2507+ return false ;
2508+ const Token* tok = nameToken () ? nameToken ()->previous () : nullptr ;
2509+ while (Token::Match (tok, " const|volatile" ))
2510+ tok = tok->previous ();
2511+ return Token::simpleMatch (tok, " *" );
25072512}
25082513
25092514bool Variable::isUnsigned () const
Original file line number Diff line number Diff line change @@ -226,6 +226,7 @@ class TestBufferOverrun : public TestFixture {
226226 TEST_CASE (buffer_overrun_34); // #11035
227227 TEST_CASE (buffer_overrun_35); // #2304
228228 TEST_CASE (buffer_overrun_36);
229+ TEST_CASE (buffer_overrun_37);
229230 TEST_CASE (buffer_overrun_errorpath);
230231 TEST_CASE (buffer_overrun_bailoutIfSwitch); // ticket #2378 : bailoutIfSwitch
231232 TEST_CASE (buffer_overrun_function_array_argument);
@@ -3497,6 +3498,15 @@ class TestBufferOverrun : public TestFixture {
34973498 ASSERT_EQUALS (" " , errout_str ());
34983499 }
34993500
3501+ void buffer_overrun_37 () { // #14703
3502+ check (" void f() {\n "
3503+ " const char *dst[256];\n "
3504+ " static const char * const src[] = {\" a\" , \" b\" , \" c\" };\n "
3505+ " memcpy(dst, src, sizeof(src));\n "
3506+ " }\n " );
3507+ ASSERT_EQUALS (" " , errout_str ());
3508+ }
3509+
35003510 void buffer_overrun_errorpath () {
35013511 setMultiline ();
35023512 Settings s = settings0;
You can’t perform that action at this time.
0 commit comments