[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:01008] Re: ファイルのuid/gidが存在しないユーザのものだった場合
- Subject: [FDclone-users:01008] Re: ファイルのuid/gidが存在しないユーザのものだった場合
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Thu, 25 Apr 2013 21:26:18 +0900
しらいです。
In Message-Id <op.wv25phuqc4zqer@pc03>
"Hironao Komatsu" <hirkmt@gmail.com>さんwrites:
> 小松です。
> ディレクトリに、uidやgidが存在しないユーザのものであるファイル……例えば
>
> $ ls -l
> 合計 0
> -rw-r--r-- 1 hironao 9547 0 4月 24 13:30 yyy
> -rw-r--r-- 1 5194 users 0 4月 24 13:31 zzz
>
> のようなのがある場合、FDclone 3.01では10進表現のuid/gidの後ろに'\0'が紛れ
> 込んでしまうらしく、表示がそこで途切れます。
確かに。
> で直ることは直るのですが、なんだかしっくりきません。というのも、このバグ
> は3.00lと3.00mの間で埋め込まれたようなのですが、この2つの間のdiffにはこれ
> を伺わせるような変更点はないからで……
browse.c 側ではなくてそこから呼ばれている Xsnprintf() 側の
bug ですね。Xsnprintf() -> snprintf() という変更でも直る筈で
す。3.00l -> 3.00m で妙な挙動になってます。
後ろに \0 が挿入されるのは browse.c の側でも折込み済で、後
でその位置に空白を上書きしています。問題は指定した文字数分だ
け Xsnprintf() が文字を埋めてくれていないことでして。
ここでは数値と空白と合わせて 8 文字書くように指示している
のに、実際は 7 文字しか書かなかったために、8 文字目に書かれ
た \0 が 9 文字目の空白では上書きされなかった訳です。
以下 patch です。
---- Cut Here ----
diff -u ../old/FD-3.01/printf.c ./printf.c
--- ../old/FD-3.01/printf.c Fri Aug 3 00:00:00 2012
+++ ./printf.c Thu Apr 25 20:49:25 2013
@@ -354,7 +354,7 @@
if (Xisdigit(num[len])) num[len] = '9';
#endif
- while (i++ < len) if (setchar(num[len - i], pbufp) < 0) return(-1);
+ while (i < len) if (setchar(num[len - ++i], pbufp) < 0) return(-1);
if (width >= 0) for (; i < width; i++) {
if (setchar(' ', pbufp) < 0) return(-1);
---- Cut Here ----
一見同じことをしているようですが、loop を抜けた後の i の値
が異なるので、この修正箇所に続く次の loop 回数が異なることに
なります。
3.00l まではこの修正箇所は普通の for loop だったので、loop
終了時は i = len でした。3.00m...3.01 ではそれが i = len + 1
になってますね。
uid/gid 以外にも printf でこの手の指示をしている箇所はある
のですが、他は直接端末に書いてるので後続の空白が一文字足りな
くても気づくことはないでしょう。
さて、この patch を適用した 3.01a を早々に release したい
ところなんですが、今しがたその準備をしていたら MS-DOS 開発環
境が起動しないことに気づきました。
前回の release から一年近く経っていて、その間全然起動して
いなかったもので、このうんともすんとも言わない PC に何が起き
たのか皆目見当も付きません。
まぁ MS-DOS 版なんか見捨ててしまっていいんでしょうけど、時
間が出来たらちょっと足掻いてみようと思うので、release は暫く
お待ち下さい。
多分電源ユニットだと思うんですけど、実はこないだまで骨折で
入院していて未だ普通に歩けない状況なんで、この手の力仕事は難
易度が高いんです。申し訳ありません。
しらい たかし