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 を終了します。 ご不便をおかけして申し訳ありません。」というエラーが出たり。