[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cvs-ml 430] Re: Can't diff command



 やっと原因がつかめて直しました。

 修正お願いします(笑)>河田さん

--------------------------------------------------------------
原因:
 テンポラリファイルを作成する時にcvs_temp_name()を使ってファイル
名を取得してます。
 で、この戻り値がポインタなんですが、そのポインタのサイズがわから
ないのに、strcatで文字列を追加してメモリを壊していました。

 障害が発生するのはHAVE_TEMPNAMが定義されている場合だけと
思われます。それ以外での条件コンパイルのcvs_temp_name()は
少し余裕を持って領域を確保していますから…。 

回避:
 cvs_temp_name()でrealloc()してサイズを大きくする。
     // リサイズする数字は適当でいいのかも
     retval = realloc(retval, 255 - strlen (Tmpdir) - 9);
 
 他の条件コンパイル時も不安なので増やして確保する。
     value = xmalloc (strlen (Tmpdir) + 255);
     char value[255];
--------------------------------------------------------------

> set -x
> ...とかで細切れにしてやってみてくださいませ。
 これってどういう意味でしょうか?

 join系のBUGって?
 この部分だけのパッチ下さい(笑)

---
森山敏治