Project

General

Profile

Bug #9868

Updated by nobu (Nobuyoshi Nakada) almost 10 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>

Back