Fix yyrestart(NULL) SEGV.
authorMightyjo <mightyjo@gmail.com>
Tue, 4 Oct 2016 02:50:00 +0000 (22:50 -0400)
committerWill Estes <westes575@gmail.com>
Wed, 5 Oct 2016 21:19:03 +0000 (17:19 -0400)
src/flex.skl
tests/.gitignore
tests/Makefile.am
tests/cxx_restart.ll [new file with mode: 0644]
tests/cxx_restart.txt [new file with mode: 0644]

index ccec41537f838b7c104a2a9233b3b7d68596781d..de451680496e75e4c7a02a0433a40e100c827449 100644 (file)
@@ -2056,7 +2056,7 @@ static void yy_load_buffer_state  (M4_YY_DEF_ONLY_ARG)
        b->yy_input_file = file;
 %endif
 %if-c++-only
-       b->yy_input_file = file.rdbuf();
+       b->yy_input_file = (&file == 0) ? NULL : file.rdbuf();
 %endif
        b->yy_fill_buffer = 1;
 
index 69c482dc51a9cfe8987a4e8ce9bd71b3ae30790f..6ee4152fb144d433ecb2ae283be4b4dde664fc4a 100644 (file)
@@ -31,6 +31,8 @@ cxx_basic
 cxx_basic.cc
 cxx_multiple_scanners
 cxx_multiple_scanners_[12].cc
+cxx_restart
+cxx_restart.cc
 cxx_yywrap.i3
 cxx_yywrap.cc
 debug_nr
index 0fa8b8ffa92bd51a9d24133d0f3cb8505b9ec2af..00b7880257d3e76d7ea1351802f8f4c2c85a25ba 100644 (file)
@@ -74,6 +74,7 @@ simple_tests = \
        ccl \
        cxx_basic \
        cxx_multiple_scanners \
+       cxx_restart \
        debug_nr \
        debug_r \
        extended \
@@ -133,6 +134,7 @@ c_cxx_nr_SOURCES = c_cxx_nr.lll
 c_cxx_r_SOURCES = c_cxx_r.lll
 ccl_SOURCES = ccl.l
 cxx_basic_SOURCES = cxx_basic.ll
+cxx_restart_SOURCES = cxx_restart.ll
 cxx_multiple_scanners_SOURCES = cxx_multiple_scanners_main.cc cxx_multiple_scanners_1.ll cxx_multiple_scanners_2.ll
 cxx_yywrap_i3_SOURCES = cxx_yywrap.ll
 debug_nr_SOURCES = debug_nr.l
@@ -214,6 +216,7 @@ CLEANFILES = \
        cxx_basic.cc \
        cxx_multiple_scanners_1.cc \
        cxx_multiple_scanners_2.cc \
+       cxx_restart.cc \
        cxx_yywrap.cc \
        debug_nr.c \
        debug_r.c \
@@ -281,6 +284,7 @@ EXTRA_DIST = \
        ccl.txt \
        cxx_basic.txt \
        cxx_multiple_scanners.txt \
+       cxx_restart.txt \
        cxx_yywrap.txt \
        debug_nr.txt \
        debug_r.txt \
diff --git a/tests/cxx_restart.ll b/tests/cxx_restart.ll
new file mode 100644 (file)
index 0000000..0ba6be1
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * This file is part of flex.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
+%{
+
+#include "config.h"
+
+%}
+
+%option 8bit prefix="test"
+%option warn c++
+%option nounput nomain noinput noyywrap 
+
+%%
+
+.              { }
+
+%%
+
+int main(void);
+
+int
+main (void)
+{
+    yyFlexLexer f;
+    f.switch_streams(&std::cin, &std::cout);
+    f.yylex();
+    f.yyrestart(NULL);
+    std::cout << "TEST RETURNING OK." << std::endl;
+    return 0;
+}
diff --git a/tests/cxx_restart.txt b/tests/cxx_restart.txt
new file mode 100644 (file)
index 0000000..7288a40
--- /dev/null
@@ -0,0 +1,2 @@
+0000 foo 1111 foo 0000 bar
+0000 foo 1111 foo 0000 bar