2008年1月11日金曜日

募集:ja-plain2がbrokenだったけどなおしてみた。

こんな感じで一応解決?




--- src/macro.h.org 2008-01-11 01:36:11.000000000 +0900
+++ src/macro.h 2008-01-11 01:33:10.000000000 +0900
@@ -2,6 +2,8 @@
* Copyright (C) 1992,1993 NEC Corporation.
* $Id: macro.h,v 2.6 1994/04/19 10:16:49 uchida Exp $ (NEC)
*/
+#define MAX_MACRO_LEN 320
+
#define MACRO_MAXARG 10

#define M_DOC_BEGIN 0
@@ -74,5 +76,5 @@

struct macDefs {
int mdef_number;
- char *mdef_def;
+ char mdef_def[MAX_MACRO_LEN];
};



これでとりあえずTeX, HTMLへの変換動作はうまくいってます。
本当ならヘッダ部の怪しいところ全部、ちゃんと配列に置き換えるべきなのかもしれません。



http://www1.odn.ne.jp/taraijpn/japanese_plain2_20080111.diff.txt
http://www1.odn.ne.jp/taraijpn/japanese_plain2_20080111.tar.gz



portsにしたのでとりあえず、動作確認してくれる人を募集します。
FreeBSD関係ない部分とそうでない部分に分ければLinuxのパッケージにも入れられるかな。
分けてくれる人も大募集。

5 件のコメント:

taraijpn さんのコメント...

send-prしました。

匿名 さんのコメント...

GDB使ってそこまで調べたなら、
定義に書き加えないように元を修正したらよかったような気がw
line 293
>> macroParse(strsave(mcp->mdef_def), 略
みたいにしたらどうよ。

taraijpn さんのコメント...

なるほど、strsave()というかstrdup()ってこういう時に使うんですねえ。
macroParseした後にfleeするよういじればメモリ食いすぎも防げるわけか……そちらのほうが簡単そうなので、ちょっと手を入れてみます。

plain2についてはhtml-table拡張パッチが公開されていて、これも取り込んで改めてsend-prしたいと画策してたんですが、すっかり忘れていたという。

taraijpn さんのコメント...


http://www.pwv.co.jp/take_public_html/SampleC/SampleC_c3.html


コンパイラとかをちゃんと実装の部分まで踏み込んで勉強してきた人にとっては定番の知識だったのか……なるほどなあ。

taraijpn さんのコメント...

ちょいちょいっとstrdupを挟んで解決、とはいかないようでした。残念。

まあコンパイラに指示してまで当該領域をwritableにしておきたいという意思を尊重する方向でいきましょう、ってことで。