diff options
-rw-r--r-- | lexers/LexMMIXAL.cxx | 9 | ||||
-rw-r--r-- | lexilla/test/examples/mmixal/references.mms | 16 | ||||
-rw-r--r-- | lexilla/test/examples/mmixal/references.mms.styled | 16 |
3 files changed, 36 insertions, 5 deletions
diff --git a/lexers/LexMMIXAL.cxx b/lexers/LexMMIXAL.cxx index 0917b5d0a..49b639dd2 100644 --- a/lexers/LexMMIXAL.cxx +++ b/lexers/LexMMIXAL.cxx @@ -99,12 +99,11 @@ static void ColouriseMMIXALDoc(Sci_PositionU startPos, Sci_Position length, int } } else if (sc.state == SCE_MMIXAL_REF) { // REF if (!IsAWordChar(sc.ch) ) { - char s[100]; - sc.GetCurrent(s, sizeof(s)); + char s0[100]; + sc.GetCurrent(s0, sizeof(s0)); + const char *s = s0; if (*s == ':') { // ignore base prefix for match - for (size_t i = 0; i != sizeof(s); ++i) { - *(s+i) = *(s+i+1); - } + ++s; } if (special_register.InList(s)) { sc.ChangeState(SCE_MMIXAL_REGISTER); diff --git a/lexilla/test/examples/mmixal/references.mms b/lexilla/test/examples/mmixal/references.mms new file mode 100644 index 000000000..82be6e8c9 --- /dev/null +++ b/lexilla/test/examples/mmixal/references.mms @@ -0,0 +1,16 @@ +# Bug #2019 Buffer over-read in MMIXAL lexer +label + PREFIX Foo: +% Relative reference (uses PREFIX) + JMP label +% + JMP @label +% Absolute reference (does not use PREFIX) + JMP :label +% In register list so treated as register + JMP :rA +% Too long for buffer so truncated + JMP l1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +% Too long for buffer so truncated then treated as absolute + JMP :l1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +% diff --git a/lexilla/test/examples/mmixal/references.mms.styled b/lexilla/test/examples/mmixal/references.mms.styled new file mode 100644 index 000000000..78ae29a3a --- /dev/null +++ b/lexilla/test/examples/mmixal/references.mms.styled @@ -0,0 +1,16 @@ +{1}# Bug #2019 Buffer over-read in MMIXAL lexer +{2}label{4} +{0} {5}PREFIX{7} {10}Foo:{1} +% Relative reference (uses PREFIX) +{0} {5}JMP{7} {10}label{1} +% +{0} {5}JMP{7} {10}@label{1} +% Absolute reference (does not use PREFIX) +{0} {5}JMP{7} {10}:label{1} +% In register list so treated as register +{0} {5}JMP{7} {13}:rA{1} +% Too long for buffer so truncated +{0} {5}JMP{7} {10}l1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890{1} +% Too long for buffer so truncated then treated as absolute +{0} {5}JMP{7} {10}:l1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890{1} +% |