わたなべです.

WATANABE Tetsuya <tetsu / jpn.hp.com> writes:

:ext/socket.c で strtoul(3) を使っているんですが、ちょっと仕様と
:実際の動作が違うようです。仕様だと変換できないような文字では 
:ULONG_MAX を返すはずですが、実際には 0 が帰ってきます。

ULONG_MAX を返すのはオーバーフローしたときだけです.
だからもともと strtoul だけでは判断できません.

"ruby" のような文字列を与えた場合は 0 が返るのは昔からそう
だったから仕様と言えば仕様でしょうね.
初期値 0 で変換できない文字にぶちあたったら break するような
処理だと思うので, たとえば "12ruby" なら 12 になります.

やるんなら自前でチェックしないとやっぱだめでしょうね.

-- 
わたなべひろふみ