aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2021-02-17 07:22:47 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2021-02-17 07:22:47 +0000
commit6b7e592c215fb76ea027f25030ddc9a697184fbe (patch)
tree09f4a3c77d3934d6a8f6601791086fab5c5a4683
parent3396647c8dc40e859609995d8f5415df43504416 (diff)
downloadsrc-6b7e592c215fb76ea027f25030ddc9a697184fbe.tar.gz
src-6b7e592c215fb76ea027f25030ddc9a697184fbe.zip
lex: Do not let input() return 0 when end-of-file is reached
Importing flex 2.6.4 has introduced a regression: input() now returns 0 instead of EOF to indicate that the end of input was reached, just like traditional AT&T and POSIX lex. Note the behavior contradicts flex(1). See "INCOMPATIBILITIES WITH LEX AND POSIX" section for information. This incompatibility traces back to the original version and documented in its manual page by the Vern Paxson. Apparently, it has been reported in a few places, e.g., https://github.com/westes/flex/issues/448 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=911415 Unfortunately, this also breaks the scanner used by libdtrace and dtrace is unable to resolve some probe argument types as a result. See PR253440 for more information. Note the regression was introduced by the following upstream commit without any explanation or documentation change: https://github.com/westes/flex/commit/f863c9490e6912ffcaeb12965fb3a567a10745ff Now we restore the traditional flex behavior unless lex-compatibility mode is set with "-l" option because I believe the author originally wanted to make it more lex and POSIX compatible. PR: 253440 Reported by: markj
-rw-r--r--contrib/flex/src/flex.skl4
1 files changed, 4 insertions, 0 deletions
diff --git a/contrib/flex/src/flex.skl b/contrib/flex/src/flex.skl
index 242645f53245..c23b944ea473 100644
--- a/contrib/flex/src/flex.skl
+++ b/contrib/flex/src/flex.skl
@@ -1863,7 +1863,11 @@ m4_ifdef( [[M4_YY_USE_LINENO]],
case EOB_ACT_END_OF_FILE:
{
if ( yywrap( M4_YY_CALL_ONLY_ARG ) )
+#ifdef YY_FLEX_LEX_COMPAT
return 0;
+#else
+ return EOF;
+#endif
if ( ! YY_G(yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;