Compare commits
No commits in common. "713a19a3339f2ed01eefdb70243d35dcf40a65db" and "7df66ed879c07a71dcf1cb594672d918344ffdf3" have entirely different histories.
713a19a333
...
7df66ed879
@ -1,28 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@ -1,72 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
BIN
flex-2.6.1.tar.xz
Normal file
BIN
flex-2.6.1.tar.xz
Normal file
Binary file not shown.
Binary file not shown.
52
flex.spec
52
flex.spec
@ -1,24 +1,12 @@
|
|||||||
Name: flex
|
Name: flex
|
||||||
Version: 2.6.4
|
Version: 2.6.1
|
||||||
Release: 5
|
Release: 13
|
||||||
Summary: A fast lexical analyzer generator
|
Summary: A fast lexical analyzer generator
|
||||||
License: BSD
|
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.gz
|
Source0: https://github.com/westes/flex/releases/download/v%{version}/flex-%{version}.tar.xz
|
||||||
|
|
||||||
Patch0000: build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch
|
BuildRequires: gcc gettext help2man m4 bison
|
||||||
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 gcc-c++ gettext help2man m4 bison texinfo automake autoconf
|
|
||||||
Requires: m4
|
Requires: m4
|
||||||
Requires(post): info
|
Requires(post): info
|
||||||
Requires(preun): info
|
Requires(preun): info
|
||||||
@ -48,10 +36,9 @@ 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} -p1
|
%autosetup -n %{name}-%{version}
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf
|
|
||||||
%configure
|
%configure
|
||||||
%make_build
|
%make_build
|
||||||
|
|
||||||
@ -68,9 +55,6 @@ ln -s flex.1 .%{_mandir}/man1/lex.1
|
|||||||
ln -s flex.1 .%{_mandir}/man1/flex++.1
|
ln -s flex.1 .%{_mandir}/man1/flex++.1
|
||||||
ln -s libfl.a .%{_libdir}/libl.a
|
ln -s libfl.a .%{_libdir}/libl.a
|
||||||
|
|
||||||
%check
|
|
||||||
make check
|
|
||||||
|
|
||||||
%post
|
%post
|
||||||
if [ -f %{_infodir}/flex.info.gz ]; then # for --excludedocs
|
if [ -f %{_infodir}/flex.info.gz ]; then # for --excludedocs
|
||||||
/sbin/install-info %{_infodir}/flex.info.gz --dir-file=%{_infodir}/dir ||:
|
/sbin/install-info %{_infodir}/flex.info.gz --dir-file=%{_infodir}/dir ||:
|
||||||
@ -88,7 +72,7 @@ fi
|
|||||||
%dir %{_pkgdocdir}
|
%dir %{_pkgdocdir}
|
||||||
%license COPYING
|
%license COPYING
|
||||||
%{_pkgdocdir}/NEWS
|
%{_pkgdocdir}/NEWS
|
||||||
%{_pkgdocdir}/README.md
|
%{_pkgdocdir}/README
|
||||||
%{_bindir}/*
|
%{_bindir}/*
|
||||||
%{_includedir}/FlexLexer.h
|
%{_includedir}/FlexLexer.h
|
||||||
%{_infodir}/flex.info*
|
%{_infodir}/flex.info*
|
||||||
@ -100,31 +84,9 @@ fi
|
|||||||
|
|
||||||
%files help
|
%files help
|
||||||
%{_pkgdocdir}
|
%{_pkgdocdir}
|
||||||
%exclude %{_pkgdocdir}/NEWS
|
|
||||||
%exclude %{_pkgdocdir}/README.md
|
|
||||||
%{_mandir}/man1/*
|
%{_mandir}/man1/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Tue Jul 12 2022 panxiaohe <panxh.life@foxmail.com> - 2.6.4-5
|
|
||||||
- enable check test suite
|
|
||||||
- delete duplicate package files: NEWS,README.md
|
|
||||||
|
|
||||||
* Mon Jun 13 2022 panxiaohe <panxh.life@foxmail.com> - 2.6.4-4
|
|
||||||
- modify license
|
|
||||||
|
|
||||||
* Fri May 28 2021 yangzhuangzhuang<yangzhuangzhuang1@huawei.com> - 2.6.4-3
|
|
||||||
- The autoreconf command is used during compilation.
|
|
||||||
Therefore,the automake and autoconf compilation dependencies need to added.
|
|
||||||
|
|
||||||
* 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
|
||||||
|
|||||||
@ -1,4 +0,0 @@
|
|||||||
version_control: github
|
|
||||||
src_repo: westes/flex
|
|
||||||
tag_prefix: ^v
|
|
||||||
seperator: .
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@ -1,100 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user