From e442903fde1995ce4abbbe1e675863c8c040a0ee Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Fri, 4 Apr 2014 08:53:11 +0100 Subject: [PATCH] Fix segfault when there are too many closing round brackets in parsed code --- Examples/test-suite/errors/cpp_extra_brackets.i | 6 ++++++ Examples/test-suite/errors/cpp_extra_brackets.stderr | 1 + Source/Swig/scanner.c | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 Examples/test-suite/errors/cpp_extra_brackets.i create mode 100644 Examples/test-suite/errors/cpp_extra_brackets.stderr 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); } /* -----------------------------------------------------------------------------