!7 flex update to 2.6.4

Merge pull request !7 from yixiangzhike/master
This commit is contained in:
openeuler-ci-bot 2020-08-03 20:38:44 +08:00 committed by Gitee
commit fa880ece59
14 changed files with 471 additions and 6 deletions

View File

@ -0,0 +1,28 @@
From 67b3e448727da3093cdc6f0ca7fd151fbf3c10ad Mon Sep 17 00:00:00 2001
From: jannick0 <jannick0@users.noreply.github.com>
Date: Sun, 7 Jan 2018 21:34:32 +0100
Subject: [PATCH] scanner: fix default of yy_top_state()
For an _empty_ state stack the top of the state stack defaults to the state as if no state stack were present.
NB: sanity check for `yy_start_stack_ptr` could be added in `yy_top_state()`.
---
src/flex.skl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/flex.skl b/src/flex.skl
index 1043238..05729df 100644
--- a/src/flex.skl
+++ b/src/flex.skl
@@ -2465,7 +2465,7 @@ m4_ifdef( [[M4_YY_NO_TOP_STATE]],,
%endif
{
M4_YY_DECL_GUTS_VAR();
- return YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr) - 1];
+ return yy_start_stack_ptr > 0 ? YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr) - 1] : YY_START;
}
]])
--
1.8.3.1

View File

@ -0,0 +1,26 @@
From 3971b6146aab12e1c54945dcb47ae92a25a3f3c3 Mon Sep 17 00:00:00 2001
From: jannick0 <jannick0@users.noreply.github.com>
Date: Mon, 8 Jan 2018 10:04:23 +0100
Subject: [PATCH] scanner: fix default of yy_top_state()
extend fix when `YY_G` is used (reentrant scanner).
---
src/flex.skl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/flex.skl b/src/flex.skl
index 05729df..d9cdcc0 100644
--- a/src/flex.skl
+++ b/src/flex.skl
@@ -2465,7 +2465,7 @@ m4_ifdef( [[M4_YY_NO_TOP_STATE]],,
%endif
{
M4_YY_DECL_GUTS_VAR();
- return yy_start_stack_ptr > 0 ? YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr) - 1] : YY_START;
+ return YY_G(yy_start_stack_ptr) > 0 ? YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr) - 1] : YY_START;
}
]])
--
1.8.3.1

View File

@ -0,0 +1,32 @@
From 24fd0551333e7eded87b64dd36062da3df2f6380 Mon Sep 17 00:00:00 2001
From: Explorer09 <explorer09@gmail.com>
Date: Mon, 4 Sep 2017 10:47:33 +0800
Subject: [PATCH] build: AC_USE_SYSTEM_EXTENSIONS in configure.ac.
This would, e.g. define _GNU_SOURCE in config.h, enabling the
reallocarray() prototype in glibc 2.26+ on Linux systems with that
version of glibc.
Fixes #241.
---
configure.ac | 2 ++
1 file changed, 2 insertions(+)
diff --git a/configure.ac b/configure.ac
index c6f12d6..3c977a4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,8 +25,10 @@
# autoconf requirements and initialization
AC_INIT([the fast lexical analyser generator],[2.6.4],[flex-help@lists.sourceforge.net],[flex])
+AC_PREREQ([2.60])
AC_CONFIG_SRCDIR([src/scan.l])
AC_CONFIG_AUX_DIR([build-aux])
+AC_USE_SYSTEM_EXTENSIONS
LT_INIT
AM_INIT_AUTOMAKE([1.11.3 -Wno-portability foreign check-news std-options dist-lzip parallel-tests subdir-objects])
AC_CONFIG_HEADER([src/config.h])
--
1.8.3.1

View File

@ -0,0 +1,29 @@
From 2c7e34bb958ac5d083b2bab4c89907cd0669196d Mon Sep 17 00:00:00 2001
From: Jeff Smith <whydoubt@gmail.com>
Date: Sat, 1 Apr 2017 01:18:12 -0500
Subject: [PATCH] filter: Output correct #line value for current file.
A #line pre-processor directive specifies the line number and source
file of the following lines. If the source file _is_ the current file,
the line number should be that of the line following the directive. So
the specified line number should be the current line number plus 1.
---
src/filter.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/filter.c b/src/filter.c
index 71f3635..ed3bfe3 100644
--- a/src/filter.c
+++ b/src/filter.c
@@ -391,7 +391,7 @@ int filter_fix_linedirs (struct filter *chain)
/* Adjust the line directives. */
in_gen = true;
snprintf (buf, readsz, "#line %d \"%s\"\n",
- lineno, filename);
+ lineno + 1, filename);
}
else {
/* it's a #line directive for code we didn't write */
--
1.8.3.1

View File

@ -0,0 +1,72 @@
From 8a044dbe6d03877c3d8c205ae76be9c41f442237 Mon Sep 17 00:00:00 2001
From: "viktor.shepel" <shepelvictor@bigmir.net>
Date: Tue, 20 Jun 2017 17:03:42 +0300
Subject: [PATCH] filter: memory leak free scanner postprocessing.
**Issue:**
Scanner postprocessing leaks memory during correction of `#line`
directives values and generation of C header file.
**Root cause:**
`filter_fix_linedirs` and `filter_tee_header` functions do not
dispose allocated memory.
**Solution:**
Automatically reclaim affected memory by allocating it on stack
insted of heap. Stack allocation should not be a problem as its
only 512 bytes and there is no recursive calls.
---
src/filter.c | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/src/filter.c b/src/filter.c
index ed3bfe3..35b80a9 100644
--- a/src/filter.c
+++ b/src/filter.c
@@ -230,8 +230,7 @@ int filter_tee_header (struct filter *chain)
* header file at the same time.
*/
- const int readsz = 512;
- char *buf;
+ char buf[512];
int to_cfd = -1;
FILE *to_c = NULL, *to_h = NULL;
bool write_header;
@@ -283,10 +282,7 @@ int filter_tee_header (struct filter *chain)
fprintf (to_c, "m4_define( [[M4_YY_OUTFILE_NAME]],[[%s]])m4_dnl\n",
outfilename ? outfilename : "<stdout>");
- buf = malloc((size_t) readsz);
- if (!buf)
- flexerror(_("malloc failed in filter_tee_header"));
- while (fgets (buf, readsz, stdin)) {
+ while (fgets (buf, sizeof buf, stdin)) {
fputs (buf, to_c);
if (write_header)
fputs (buf, to_h);
@@ -336,8 +332,8 @@ int filter_tee_header (struct filter *chain)
*/
int filter_fix_linedirs (struct filter *chain)
{
- char *buf;
- const size_t readsz = 512;
+ char buf[512];
+ const size_t readsz = sizeof buf;
int lineno = 1;
bool in_gen = true; /* in generated code */
bool last_was_blank = false;
@@ -345,10 +341,6 @@ int filter_fix_linedirs (struct filter *chain)
if (!chain)
return 0;
- buf = malloc(readsz);
- if (!buf)
- flexerror(_("malloc failed in filter_fix_linedirs"));
-
while (fgets (buf, (int) readsz, stdin)) {
regmatch_t m[10];
--
1.8.3.1

Binary file not shown.

BIN
flex-2.6.4.tar.gz Normal file

Binary file not shown.

View File

@ -1,12 +1,24 @@
Name: flex Name: flex
Version: 2.6.1 Version: 2.6.4
Release: 13 Release: 2
Summary: A fast lexical analyzer generator Summary: A fast lexical analyzer generator
License: BSD and LGPLv2+ License: BSD and LGPLv2+
URL: https://github.com/westes/flex URL: https://github.com/westes/flex
Source0: https://github.com/westes/flex/releases/download/v%{version}/flex-%{version}.tar.xz Source0: https://github.com/westes/flex/releases/download/v%{version}/flex-%{version}.tar.gz
BuildRequires: gcc gettext help2man m4 bison Patch0000: build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch
Patch0001: filter-memory-leak-free-scanner-postprocessing.patch
Patch0002: scanner-c-i-j-should-preserve-case.patch
Patch0003: filter-Output-correct-line-value-for-current-file.patch
Patch0004: scanner-memory-leak-free-scanner-generator.patch
Patch0005: scanner-Ignore-comment-lines-in-skeleton-files.patch
Patch0006: mkskel.sh-fix-EOL-issue-for-CRLF-systems.patch
Patch0007: scanner-temporarily-protect-against-ccl-overflow-ove.patch
Patch0008: scanner-prevent-overflow-in-add_action.patch
Patch0009: 0001-scanner-fix-default-of-yy_top_state.patch
Patch0010: 0002-scanner-fix-default-of-yy_top_state.patch
BuildRequires: gcc gettext help2man m4 bison texinfo
Requires: m4 Requires: m4
Requires(post): info Requires(post): info
Requires(preun): info Requires(preun): info
@ -36,9 +48,10 @@ Obsoletes: flex-doc
Man pages and other related documents for %{name}. Man pages and other related documents for %{name}.
%prep %prep
%autosetup -n %{name}-%{version} %autosetup -n %{name}-%{version} -p1
%build %build
autoreconf
%configure %configure
%make_build %make_build
@ -72,7 +85,7 @@ fi
%dir %{_pkgdocdir} %dir %{_pkgdocdir}
%license COPYING %license COPYING
%{_pkgdocdir}/NEWS %{_pkgdocdir}/NEWS
%{_pkgdocdir}/README %{_pkgdocdir}/README.md
%{_bindir}/* %{_bindir}/*
%{_includedir}/FlexLexer.h %{_includedir}/FlexLexer.h
%{_infodir}/flex.info* %{_infodir}/flex.info*
@ -87,6 +100,15 @@ fi
%{_mandir}/man1/* %{_mandir}/man1/*
%changelog %changelog
* Sun Jun 28 2020 openEuler liuchengaung<liuchenguang4@huawei.com> - 2.6.4-2
- quality enhancement synchronization github patch
* Mon May 11 2020 openEuler Buildteam <buildteam@openeuler.org> - 2.6.4-1
- Type:requirement
- ID:NA
- SUG:NA
- DESC:update to 2.6.4
* Tue Jan 7 2020 chengquan<chengquan3@huawei.com> - 2.6.1-13 * Tue Jan 7 2020 chengquan<chengquan3@huawei.com> - 2.6.1-13
- Type:enhancement - Type:enhancement
- ID:NA - ID:NA

View File

@ -0,0 +1,25 @@
From 3f2b9a4d630b702f6dd8592014f89d40a6a4bcc1 Mon Sep 17 00:00:00 2001
From: Jannick <thirdedition@gmx.net>
Date: Tue, 18 Jul 2017 02:03:30 +0200
Subject: [PATCH] mkskel.sh: fix EOL issue for CRLF systems
---
src/mkskel.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/mkskel.sh b/src/mkskel.sh
index 1aa59e1..2d6ae9f 100755
--- a/src/mkskel.sh
+++ b/src/mkskel.sh
@@ -48,7 +48,7 @@ sed '/^%#/d
s/m4_/m4preproc_/g
s/a4_/4_/g
s/[\\"]/\\&/g
-s/.*/ "&",/'
+s/[^\r]*/ "&",/'
echo ' 0
};'
--
1.8.3.1

View File

@ -0,0 +1,34 @@
From 7af066b952fc81eb1a29079c7206e50ffed80c40 Mon Sep 17 00:00:00 2001
From: jannick0 <jannick0@users.noreply.github.com>
Date: Sun, 9 Jul 2017 22:36:14 +0200
Subject: [PATCH] scanner: Ignore comment lines in skeleton files.
In skeleton files comments are indicated by leading `%#` and when
directly read in using `flex -S <skeleton.skl>` they should be
ignored. Example: `flex.skl`.
Amending commit 2f21edac99b5efc432417233e6e53326d630e08f which removed
this conditional branch.
---
src/misc.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/misc.c b/src/misc.c
index 39483ea..9ead263 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -732,7 +732,10 @@ void skelout (void)
*/
#define cmd_match(s) (strncmp(buf,(s),strlen(s))==0)
- if (buf[1] == '%') {
+ if (buf[1] == '#') {
+ /* %# indicates comment line to be ignored */
+ }
+ else if (buf[1] == '%') {
/* %% is a break point for skelout() */
return;
}
--
1.8.3.1

View File

@ -0,0 +1,26 @@
From ea4b0a129eebedba73eb08eb2639040fd758c51f Mon Sep 17 00:00:00 2001
From: NieDzejkob <niedzejkob@gmail.com>
Date: Thu, 29 Jun 2017 12:38:25 +0200
Subject: [PATCH] scanner: c{i,j} should preserve case.
Fixes #193
---
src/nfa.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/nfa.c b/src/nfa.c
index 9143cf6..3d9bf24 100644
--- a/src/nfa.c
+++ b/src/nfa.c
@@ -499,6 +499,8 @@ int mkor (int first, int second)
}
}
+ firstst[first] = MIN(firstst[first], firstst[second]);
+
finalst[first] = orend;
return first;
}
--
1.8.3.1

View File

@ -0,0 +1,100 @@
From faa877a8434a1d2f1b2ab5315eee6ca44dc79629 Mon Sep 17 00:00:00 2001
From: "viktor.shepel" <shepelvictor@bigmir.net>
Date: Tue, 20 Jun 2017 18:22:53 +0300
Subject: [PATCH] scanner: memory leak free scanner generator.
**Issue:**
Scanner generation leaks memory for transition tables when invoked
without `--tables-file` option.
**Root cause:**
`gentabs` function has different memory acquire/release conditions.
**Solution:**
Reclaim memory at the same scope where it was alloacated.
---
src/gen.c | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/src/gen.c b/src/gen.c
index 590e5d8..ec0e014 100644
--- a/src/gen.c
+++ b/src/gen.c
@@ -1234,9 +1234,9 @@ void gentabs (void)
yytbl_data_compress (yyacc_tbl);
if (yytbl_data_fwrite (&tableswr, yyacc_tbl) < 0)
flexerror (_("Could not write yyacc_tbl"));
- yytbl_data_destroy (yyacc_tbl);
- yyacc_tbl = NULL;
}
+ yytbl_data_destroy (yyacc_tbl);
+ yyacc_tbl = NULL;
/* End generating yy_accept */
if (useecs) {
@@ -1289,11 +1289,10 @@ void gentabs (void)
if (tablesext) {
yytbl_data_compress (yymeta_tbl);
if (yytbl_data_fwrite (&tableswr, yymeta_tbl) < 0)
- flexerror (_
- ("Could not write yymeta_tbl"));
- yytbl_data_destroy (yymeta_tbl);
- yymeta_tbl = NULL;
+ flexerror (_("Could not write yymeta_tbl"));
}
+ yytbl_data_destroy (yymeta_tbl);
+ yymeta_tbl = NULL;
/* End generating yy_meta */
}
@@ -1350,9 +1349,9 @@ void gentabs (void)
yytbl_data_compress (yybase_tbl);
if (yytbl_data_fwrite (&tableswr, yybase_tbl) < 0)
flexerror (_("Could not write yybase_tbl"));
- yytbl_data_destroy (yybase_tbl);
- yybase_tbl = NULL;
}
+ yytbl_data_destroy (yybase_tbl);
+ yybase_tbl = NULL;
/* End generating yy_base */
@@ -1382,9 +1381,9 @@ void gentabs (void)
yytbl_data_compress (yydef_tbl);
if (yytbl_data_fwrite (&tableswr, yydef_tbl) < 0)
flexerror (_("Could not write yydef_tbl"));
- yytbl_data_destroy (yydef_tbl);
- yydef_tbl = NULL;
}
+ yytbl_data_destroy (yydef_tbl);
+ yydef_tbl = NULL;
/* End generating yy_def */
@@ -1420,9 +1419,9 @@ void gentabs (void)
yytbl_data_compress (yynxt_tbl);
if (yytbl_data_fwrite (&tableswr, yynxt_tbl) < 0)
flexerror (_("Could not write yynxt_tbl"));
- yytbl_data_destroy (yynxt_tbl);
- yynxt_tbl = NULL;
}
+ yytbl_data_destroy (yynxt_tbl);
+ yynxt_tbl = NULL;
/* End generating yy_nxt */
/* Begin generating yy_chk */
@@ -1454,9 +1453,9 @@ void gentabs (void)
yytbl_data_compress (yychk_tbl);
if (yytbl_data_fwrite (&tableswr, yychk_tbl) < 0)
flexerror (_("Could not write yychk_tbl"));
- yytbl_data_destroy (yychk_tbl);
- yychk_tbl = NULL;
}
+ yytbl_data_destroy (yychk_tbl);
+ yychk_tbl = NULL;
/* End generating yy_chk */
free(acc_array);
--
1.8.3.1

View File

@ -0,0 +1,34 @@
From 23882383d45dcd37b5177835c873f4e1d9582db1 Mon Sep 17 00:00:00 2001
From: Explorer09 <explorer09@gmail.com>
Date: Fri, 13 Oct 2017 16:59:26 +0800
Subject: [PATCH] scanner: prevent overflow in add_action()
---
src/misc.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/misc.c b/src/misc.c
index fa33a5b..745e6a8 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -116,15 +116,14 @@ void add_action (const char *new_text)
int len = (int) strlen (new_text);
while (len + action_index >= action_size - 10 /* slop */ ) {
- int new_size = action_size * 2;
- if (new_size <= 0)
+ if (action_size > INT_MAX / 2)
/* Increase just a little, to try to avoid overflow
* on 16-bit machines.
*/
action_size += action_size / 8;
else
- action_size = new_size;
+ action_size = action_size * 2;
action_array =
reallocate_character_array (action_array,
--
1.8.3.1

View File

@ -0,0 +1,37 @@
From 12d2f8608046c5d43646e3c1dc277c0a2914ae1b Mon Sep 17 00:00:00 2001
From: Explorer09 <explorer09@gmail.com>
Date: Sat, 14 Oct 2017 00:31:01 +0800
Subject: [PATCH] scanner: temporarily protect against ccl overflow &
overwriting.
For ccladd(), if cclp given is a non-last ccl, adding a char into it
will overflow the buffer and overwrite the first char in the next ccl.
For now, add a temporary detection and protection code. (Not sure if
this could happen in user input, but if it could, then you can expect
some "corrupted" behavior for generated scanners.)
---
src/ccl.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/ccl.c b/src/ccl.c
index ff9a213..5c5af13 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -73,6 +73,13 @@ void ccladd (int cclp, int ch)
newpos = ind + len;
+ /* For a non-last cclp, expanding the set will overflow and overwrite a
+ * char in the next cclp.
+ * FIXME: Need another allocation scheme for ccl's. */
+ if (cclp != lastccl) {
+ flexfatal(_("internal error: trying to add a char to a non-last ccl.\n"));
+ }
+
if (newpos >= current_max_ccl_tbl_size) {
current_max_ccl_tbl_size += MAX_CCL_TBL_SIZE_INCREMENT;
--
1.8.3.1