cht電腦資訊gcin
adm Find login register

bug: table-update.cpp buffer overflow

guest
1subject: bug: table-update.cpp buffer overflowPromote 0 Bookmark 02017-12-26quote  

Hi,

今天發現當 HOME 非常長的時候(如 /usr/local/shared-nfs/home/$USERID ), gcin 在第一次切換到注音或詞音時會出問題。

查了一下發現是 table-update.cpp 定義了一個 char [256] 的空間放 shell command,不過這個 command 使用 sprintf 而且會重複包含HOME的檔名多次,

所以HOME一長就會超過長度256了。

 

建議

(1) mv -f 那邊可以直接用 remove() 加 rename() 來代替

(2) echo %d > %s 也直接用 open() 加 fprintf() 來替

(3) cp 那邊還是想用 system,可以改用 snprintf 加上 cmd 變成 [MAX_PATH*2]

如果覺得太麻煩,希望起碼把 cmd[256] 改成 cmd[MAX_PATH * 6]

謝謝!

 

-- piaip

eliu

joined: 2007-08-09
posted: 11480
promoted: 617
bookmarked: 187
新竹, 台灣
2subject: Promote 0 Bookmark 02017-12-27quote  

感謝,會考慮更安全的方式。

cht電腦資訊gcin
adm Find login register
views:6108