Bug #9868
Updated by nobu (Nobuyoshi Nakada) almost 11 years ago
以下のようなパッチを当てて ~~~diff ~~~ diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 44e13a4..400dda0 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -3911,6 +3911,7 @@ VpAlloc(size_t mx, const char *szVal) } /* Skip trailing spaces */ while (--i > 0) { + printf("dereference psz[%lu]\n", i); if (ISSPACE(psz[i])) psz[i] = 0; else break; } ~~~ 以下のようなコードを実行すると、 ~~~ $ ./ruby -I .ext/x86_64-linux/ -I . -I lib -r bigdecimal -e 'p BigDecimal.new("#")' dereference psz[1] dereference psz[8] dereference psz[2] dereference psz[18446744073709551615] #<BigDecimal:7f06266cb820,'0.0',9(9)> ~~~ 見るからにまずそうなデリファレンスが行われていることが観察されます。 Coverity Scan が見つけてくれました。 -- Yusuke Endoh <mame@ruby-lang.org>