From ab5d045fa8811a9d191c40bcbff996dfca8a2e32 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Tue, 8 Jan 2019 18:02:00 +0000 Subject: Fix for mixasm infinite loop on invalid F-specs (bug #32452) Thanks to Sascha Wilde. --- mixlib/mix_scanner.l | 8 +++++++- samples/Makefile.am | 2 +- samples/minus_zero.mixal | 8 -------- samples/tests/Makefile.am | 4 ++-- samples/tests/dup_f.mixal | 3 +++ samples/tests/minus_zero.mixal | 8 ++++++++ 6 files changed, 21 insertions(+), 12 deletions(-) delete mode 100644 samples/minus_zero.mixal create mode 100644 samples/tests/dup_f.mixal create mode 100644 samples/tests/minus_zero.mixal diff --git a/mixlib/mix_scanner.l b/mixlib/mix_scanner.l index 9071847..0ad1990 100644 --- a/mixlib/mix_scanner.l +++ b/mixlib/mix_scanner.l @@ -481,9 +481,15 @@ wexpr {expr}({fpart})?(,{expr}({fpart})?)* ADD_INS (); } } - {expr}/")" { + + {expr}/")"(({ws}+.*\n)|\n) { ENTER_EVAL (); } + + {expr}")".+ { + RETURN_ERROR (MIX_PERR_INV_FSPEC, g_strdup_printf ("(%s", yytext)); + } + . RETURN_ERROR (MIX_PERR_INV_FSPEC, yytext); } diff --git a/samples/Makefile.am b/samples/Makefile.am index c1dcfa6..b3dcf28 100644 --- a/samples/Makefile.am +++ b/samples/Makefile.am @@ -14,4 +14,4 @@ SUBDIRS = tests EXTRA_DIST = primes.result hello.mixal primes.mixal echo.mixal \ permutations.mixal permutations.cardrd isains.mixal \ - elevator.mixal mystery.mixal minus_zero.mixal + elevator.mixal mystery.mixal diff --git a/samples/minus_zero.mixal b/samples/minus_zero.mixal deleted file mode 100644 index 9adb914..0000000 --- a/samples/minus_zero.mixal +++ /dev/null @@ -1,8 +0,0 @@ - ORIG 3000 -START ENTA 1 - STA 1000 - LDA 0 - DECA 1 - ADD 1000 - HLT - END 3000 diff --git a/samples/tests/Makefile.am b/samples/tests/Makefile.am index b75454c..6c15e64 100644 --- a/samples/tests/Makefile.am +++ b/samples/tests/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -# Copyright (C) 2006 by Free Software Foundation, Inc. +# Copyright (C) 2006, 2019 by Free Software Foundation, Inc. # # This file is free software; as a special exception the author gives @@ -12,6 +12,6 @@ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. EXTRA_DIST = bt.mixal cbp.mixal ldan.mixal lockonw.mixal negwrite.mixal \ + minus_zero.mixal dup_f.mixal \ stress0.mixal stress1.mixal stress2.mixal stress4.mixal \ stress5.mixal stress6.mixal - diff --git a/samples/tests/dup_f.mixal b/samples/tests/dup_f.mixal new file mode 100644 index 0000000..63abc7c --- /dev/null +++ b/samples/tests/dup_f.mixal @@ -0,0 +1,3 @@ +START LDA 1(4:4),1(5:5) + HLT + END START diff --git a/samples/tests/minus_zero.mixal b/samples/tests/minus_zero.mixal new file mode 100644 index 0000000..9adb914 --- /dev/null +++ b/samples/tests/minus_zero.mixal @@ -0,0 +1,8 @@ + ORIG 3000 +START ENTA 1 + STA 1000 + LDA 0 + DECA 1 + ADD 1000 + HLT + END 3000 -- cgit v1.2.3