このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

EasyBBS のバグ

発言者:田中求之
( Date Monday, October 07, 1996 18:44:44 )


EasyBBS DX と STAR に大きなバグが残っているのに気が付きました。

DX や STAR では、発言のサイズが一定以上の大きさになったときには
それ以上コメントがつけ加えられないようにしているのですが、このサイズを
判定する部分が、正しく機能しないことに気が付きました。

ページのデータのサイズのチェックを length of ... で調べるように
していたのですが、これはデータのサイズではなく、文字数を返します。
このため、メッセージに日本語が使われていると、単純に言うと、データ
のサイズの半分しか示さないことになります。

"日本語" は、データのサイズは6バイトですが、length は 3 になるわけです。

このため、実際にはページのデータが制限範囲を超えている場合でも、いくらでも
コメントが付けられるということになり、結局、CGI 側のサイズチェックより先に、
システム(AppleScript) の側が Out Of Memorry のエラーを出す可能性が
高くなっています。

テストやデバッグでは英語でやっていたために、こんな単純なミスに気が付きません
でした (^_^;;  ひぃ〜〜

データのバイト数をカウントするように変更すればよいのですが、バイト数をカウント
するコマンドはないようなので、osax を作って対応します。


田中求之 さんからのコメント
( Monday, October 07, 1996 20:12:22 )

なお、length で日本語を1文字と数えるか、2文字と数えるかは、システム
によって変わるようです。このサーバーの場合は、EasyBBS++ のリリースの
発言に見られるように、ちゃんとサイズ制限が機能するのですが、これは
System 7.5.5 + JLK で運用しているからと思われます。

いずれにせよ、データのバイト数を数える osax を作ったので、それをもとに
どんなシステムでも正しく動くものに作り替えます。

やれやれ。

前薗 健一 さんからのコメント
( Monday, October 07, 1996 23:50:08 )

あ〜〜、びっくりした。
++ のバグかと思いました。

++ では、strlen( ... ) で判定しているので大丈夫です。 (^^)
html file に NULL (0x00) が混入することはありえませんので。

田中求之 さんからのコメント
( Tuesday, October 08, 1996 00:48:32 )

>あ〜〜、びっくりした。

あはは。すみません。スクリプト版の話です。

しかし、HyperTalk にせよ、AppleScript にせよ、2バイト文字の扱いには
苦労するなぁ。


田中求之 さんからのコメント
( Tuesday, October 08, 1996 19:44:24 )

ページのサイズを正確に判定できないというバグに対処するための方法です

まず、先ほど登録した Tanaka's osax 1.0 (fc) をダウンロードしてインストール
してください。

そのうえで、EasyBBS DX / STAR のスクリプトを、以下のように変更します。
変更を行うのは、show_page() ハンドラーです

このハンドラーの中に

 if length of myData > 22528 then

というサイズ判定を行っている部分があるのですが、これを

 if (byteLength of myData) > 22528 then

に修正します。byteLength というのが、osax に新たに追加した、データの
サイズを byte ではかるコマンドです。