aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/modules/UseLemon.cmake2
-rw-r--r--tools/lemon/lemon.c1
-rw-r--r--tools/lemon/patches/01-lemon-dashdash.patch14
3 files changed, 17 insertions, 0 deletions
diff --git a/cmake/modules/UseLemon.cmake b/cmake/modules/UseLemon.cmake
index e419de1a98..10f02fd441 100644
--- a/cmake/modules/UseLemon.cmake
+++ b/cmake/modules/UseLemon.cmake
@@ -14,6 +14,7 @@ if(LEMON_EXECUTABLE)
COMMAND ${LEMON_EXECUTABLE}
-T/usr/share/lemon/lempar.c
-d.
+ --
${_in}
DEPENDS
${_in}
@@ -32,6 +33,7 @@ else()
COMMAND $<TARGET_FILE:lemon>
-T${CMAKE_SOURCE_DIR}/tools/lemon/lempar.c
-d.
+ --
${_in}
DEPENDS
${_in}
diff --git a/tools/lemon/lemon.c b/tools/lemon/lemon.c
index 869ac58049..1a4144b383 100644
--- a/tools/lemon/lemon.c
+++ b/tools/lemon/lemon.c
@@ -2106,6 +2106,7 @@ int OptInit(char **a, struct s_options *o, FILE *err)
if( g_argv && *g_argv && op ){
int i;
for(i=1; g_argv[i]; i++){
+ if( strcmp(g_argv[i],"--")==0 ) break;
if( g_argv[i][0]=='+' || g_argv[i][0]=='-' ){
errcnt += handleflags(i,err);
}else if( strchr(g_argv[i],'=') ){
diff --git a/tools/lemon/patches/01-lemon-dashdash.patch b/tools/lemon/patches/01-lemon-dashdash.patch
new file mode 100644
index 0000000000..1c20457433
--- /dev/null
+++ b/tools/lemon/patches/01-lemon-dashdash.patch
@@ -0,0 +1,14 @@
+Don't try to parse flags and options that are after "--". This makes it
+possible to prevent a filename path with an '=' in it from being processed
+as an option.
+SPDX-License-Identifier: CC0-1.0
+--- a/lemon.c
++++ b/lemon.c
+@@ -2106,6 +2106,7 @@ int OptInit(char **a, struct s_options *o, FILE *err)
+ if( g_argv && *g_argv && op ){
+ int i;
+ for(i=1; g_argv[i]; i++){
++ if( strcmp(g_argv[i],"--")==0 ) break;
+ if( g_argv[i][0]=='+' || g_argv[i][0]=='-' ){
+ errcnt += handleflags(i,err);
+ }else if( strchr(g_argv[i],'=') ){