[讨论] r5178 "ESC hack"导致控制码混乱

楼主: x4base (RU~)   2012-04-11 01:25:39
1.
我们系站现在用的是trunk r5616
有一系列相关的bug
例如
板主要m文时
会变这样
[←]离开 [→]阅读 [Ctrl-P]发表文章 [d]删除 [z]精华区 [i]看板资讯/设定 [h]说明
编号 日 期 作 者 文 章 标 题 人气:3
● 1997 m31 3/31 x4base □ [鬼叫] QQQQQQQQQQQQ
● 1997 31 3/31 dxxxxxxxx □ [呐喊] 啊啊啊啊啊啊~~~
也就是要m第1997篇文章 光标会跑到第1996篇画出游标跟"m"这个字
或者像这样
● █▔█ ● 打倒臭教授 内容都忘光 大家都称赞
█ █ 无敌铁定当 无敌铁定当
│││ ▏ OTZ. 想对 啧啧说 :
│││ ▏ 我已经死了 但愿
(A)nnounce 【 精华公布栏 】
(F)avorite 【 我 的 最爱 】
●(C)lass 【 分组讨论区 】
点歌里的黄色漫延到'A' 前面的 '(' 了
我用gdb追踪m文时的情形 结果是这样
Breakpoint 2, doupdate () at screen.c:380
380 output((char *)&bp->data[bp->smod], bp->emod -
bp->smod + 1);
2: *&bp->data[bp->smod] @ (bp->emod - bp->smod + 1) = "\033[0;1;32m
2\033[m\033[33m 3/31 \033[m\033[1mx4base \033"
(gdb) c
Continuing.
Breakpoint 2, doupdate () at screen.c:380
380 output((char *)&bp->data[bp->smod], bp->emod -
bp->smod + 1);
2: *&bp->data[bp->smod] @ (bp->emod - bp->smod + 1) = "● 1997
m\033[0;1;33m31\033[m\033[33m 3/31 \033[m\033[1mdxxxxxxxx \033"
(gdb)
Continuing.
我觉得是r5178的这个修改造成的
@@ -547,5 +544,6 @@
- if (slp->data[cur_col] != c) {
+ // always invalid escapes
+ if (c == ESC_CHR || slp->data[cur_col] != c) {
slp->data[cur_col] = c;
slp->data[cur_col] = c;
if (!(slp->mode & MODIFIED))
slp->smod = slp->emod = cur_col;
slp->mode |= MODIFIED;
if (cur_col > slp->emod)
slp->emod = cur_col;
if (cur_col < slp->smod)
slp->smod = cur_col;
}
原本不应该判断为有修改过的screeline
因为有c == ESC_CHR 而被误判了
其实我不太了解加这个的用意是什么@@
但至少我把他改回来就正常了
不知道是不是其他更根本的bug间接造成
2.
那为什么ptt就不会出事@@
是因为ptt用的其实是pfterm吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com