[討論] 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