Skip to content

Commit 778523d

Browse files
committed
fix: 防止匹配冲突
1 parent 1f59b15 commit 778523d

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

llcomNext/LLCOM/Models/TerminalCommand.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public static ((TerminalCommand, (int, int)), int) Do(ReadOnlySpan<char> slice)
8282
//\x1b[{数字}{字母} 数字可能是2个字符也可能不存在
8383
int code = 0;
8484
char cmd = '\0';
85-
int i = 2; //从第三个字符开始分析,最多分析到第四个字符
86-
while (i < slice.Length && i < 5 && char.IsDigit(slice[i]))
85+
int i = 2; //从第三个字符开始分析,最多分析到第10个字符
86+
while (i < slice.Length && i < 10 && char.IsDigit(slice[i]))
8787
{
8888
code = code * 10 + (slice[i] - '0'); //将数字字符转换为数字
8989
i++;
@@ -160,12 +160,10 @@ public static ((TerminalCommand, (int, int)), int) Do(ReadOnlySpan<char> slice)
160160
return ((mr, (code,0)), i);
161161
}
162162
break;
163-
default:
164-
return ((TerminalCommand.Unknown, (0,0)), i); //未知命令
165163
}
166164
//检查是不是匹配\x1b[{n};{m}H
167165
if(cmd != ';')
168-
return ((TerminalCommand.None,(0,0)), 0);
166+
return ((TerminalCommand.Unknown, (0,0)), i); //未知命令
169167
//如果是分号,说明可能是光标移动到指定位置
170168
//需要检查后面的数字
171169
int col = code, row = 0;

llcomNext/llcomTest/TerminalCommandTest.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ public void TestMultiple()
3232
("\x1b[2J", TerminalCommand.ClearScreen, (2, 0), 4),
3333
("\x1b[H", TerminalCommand.ResetCursor, (0, 0), 3),
3434
("\x1b[10;20H", TerminalCommand.MoveCursorTo, (10, 20), 8),
35-
("\x1b[A", TerminalCommand.None, (0, 0), 0),
36-
("\x1b[0A", TerminalCommand.None, (0, 0), 0),
3735
("\x1b[2A", TerminalCommand.MoveCursorUp, (2, 0), 4),
3836
("\x1b[10A", TerminalCommand.MoveCursorUp, (10, 0), 5),
3937
("\x1b[m", TerminalCommand.ResetStyle, (0, 0), 3),
@@ -43,6 +41,10 @@ public void TestMultiple()
4341
("\x1b[43m", TerminalCommand.BackgroundColor, (43, 0), 5),
4442
("\x1b[2004l", TerminalCommand.Unknown, (0, 0), 7),
4543
("\x1b[2004h", TerminalCommand.Unknown, (0, 0), 7),
44+
("\x1b[A", TerminalCommand.Unknown, (0, 0), 3),
45+
("\x1bpsafsdf", TerminalCommand.None, (0, 0), 0),
46+
("\x1b666", TerminalCommand.None, (0, 0), 0),
47+
("\x111erwe", TerminalCommand.None, (0, 0), 0),
4648
};
4749

4850
foreach (var (input, expectedCmd, expectedPos, expectedLength) in testCases)

0 commit comments

Comments
 (0)