巨大な実数を str に渡したり、 mes で表示しようとすると落ちる。

mes 1e100 // 落ちる

これで HSP が落ちる。

a = str(1e100) // 落ちる

str に渡しても落ちる。

#runtime "hsp3cl"
mes 1e100 // 落ちない
a = str(1e100) // 落ちない

両方ともランタイムが hsp3cl なら落ちない。

環境は Windows XP Home SP2 / HSP3.1

OpenHSP のソースコードを追っかけてみた。

hspvar_str.cpp

static char conv[64];

という固定長の配列に書き込んでいたので、これを超えるとバッファオーバーフローが発生するというわけですねー。

同じような原因で、a=strf("%5000d", 0 )で終了時に「問題が発生したため、hsp3.exe を終了します。 ご不便をおかけして申し訳ありません。」というエラーが出たり。

インフォメーション

公開日時
2008年1月31日 午後10時37分3秒
最終更新日時
2008年2月2日 午後7時19分19秒
カテゴリ
HSP