[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:1812]Bug of kill-ring action with NULL byte in string.



ふとした事でちょっとバグっぽい現象を発見。
対象は Meadow & NTEmacs
原因はまだ追求中。
一応 plan 形式で報告してみる

------------------------------------------------------------
Submitter: Shun-ichi Goto
Subject: Bug of kill-ring action with NULL byte in string.
Date: Fri Jun 09 11:42:28 2000
X-ML-COUNT: 
Transaction: Bug report.
Status:
------------------------------------------------------------

現象

  NULL 文字 ^@ (== 0 : null byte) を含むリージョン指定をして
  kill-ring-save あるいは kill-region して取り込んだデータを yank すると、
  NULL 文字の直前までしか挿入されない。(あたかも ASCIZ 文字列ハンドリン
  グ不備かのごとく)

  具体的には  "abc^@abc" => "abc" となってしまうというもの。
  これは望まれた

  見えないだけかと思い、バッファ上で(point) を調べてみると、確かに3文字
  分しかバッファ上にないのでそういう事ではない。

試験環境

  (1) Meadow 1.13b1 +  Windows 2000 pro
  (2) NTEmacs 20.6 + WIndows 2000 pro
  (比較用) Emacs 20.6 + BSD/OS 4.0.1 + Astec-X (X-server on Win2000)

再現手順

  具体的には適当なバッファ内で abc^@abc と入力する(キーストロークとして
  は a b c C-q C-SPC a b c)。最初の "a" の直前にてset-markし最後の"c" の
  後ろにて C-w (kill-region) あるいは M-w (kill-ring-save) する。次の行
  に移るなどして適当に C-y (yank) すると、"abc" だけが挿入される。


比較

  meadow 1.13b1 と NTEmacs 20.6、 UNIX (BSD/OS)上の emacs 20.6 で試して
  みました。結論からいえば Windows 用コード(Meadow & NTEmacs) の問題であ
  り、なおかつWindow を使用する(not -nw)状態で現象が出るようです。

  
  Execute  | Meadow | NTEmacs | Emacs
  options  | result | result  | result
  ---------+--------+---------+--------
  (none)   |   NG   |    NG   |  ok
  -q	   |   NG   |    NG   |  ok
  -nw	   |  ok    |   ok    |  ok
  -q -nw   |  ok    |   ok    |  ok


  ※ emacs 20.6 は BSD-OS 上で動作させ、Win2000 上の X-Server (Astec-X)
     に表示させました。

調査

  件の文字列を (setq str (buffer-substring (mark) (point))) すると、
  正しく保持されており、mini-buffer にも正しく報告される。
  (length str) も7で正しい。
  (insert str) も正しく挿入する。
  ring の中を見ると "abc" と "abc^@abc" があり、C-u 2 y すると、
  今度は正しく挿入される。つまり

  (current-kill 0) => "abc"
  (current-kill 1) => "abc^@abc" 

  となっている。

  ちなみにその操作の後、別の文字列を C-w すると、

  (current-kill 0) => "hello"
  (current-kill 1) => "abc"
  (current-kill 2) => "abc^@abc" 

  となっており、件の操作を行なうと、どういうわけか"abc" 余計にkill-ring 
  に突っ込んでる処理がどこかにある、という事かと。
  しかも (null window-system) の状態に限って...

  とりあえずここまで。
  ピンときたひとは引続き調査よろしくぅ。

--- Regards,
 Shun-ichi Goto  <gotoh@xxxxxxxxxxx>
   R&D Group, TAIYO Corp., Tokyo, JAPAN