diff --git a/Examples/test-suite/errors/cpp_extra_brackets.i b/Examples/test-suite/errors/cpp_extra_brackets.i new file mode 100644 index 000000000..32cf7f72d --- /dev/null +++ b/Examples/test-suite/errors/cpp_extra_brackets.i @@ -0,0 +1,6 @@ +%module cpp_extra_brackets + +// Extra brackets was segfaulting in SWIG-3.0.0 +struct ABC { + int operator<<(ABC &))) { return 0; } +}; diff --git a/Examples/test-suite/errors/cpp_extra_brackets.stderr b/Examples/test-suite/errors/cpp_extra_brackets.stderr new file mode 100644 index 000000000..12bb1f327 --- /dev/null +++ b/Examples/test-suite/errors/cpp_extra_brackets.stderr @@ -0,0 +1 @@ +cpp_extra_brackets.i:5: Error: Syntax error in input(3). diff --git a/Source/Swig/scanner.c b/Source/Swig/scanner.c index 8dc3d58f5..fc1a12cc1 100644 --- a/Source/Swig/scanner.c +++ b/Source/Swig/scanner.c @@ -345,7 +345,8 @@ Scanner_push_brackets(Scanner *s) { * ----------------------------------------------------------------------------- */ void Scanner_pop_brackets(Scanner *s) { - Delitem(s->brackets, 0); + if (Len(s->brackets) > 0) /* protect against unbalanced ')' brackets */ + Delitem(s->brackets, 0); } /* -----------------------------------------------------------------------------