Project

General

Profile

Actions

Bug #9868

closed

bigdecimal#VpAlloc causes out-of-bounds read

Added by mame (Yusuke Endoh) almost 10 years ago. Updated over 4 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.2.0dev (2014-05-25 trunk 46107) [x86_64-linux]
[ruby-dev:48253]

Description

以下のようなパッチを当てて

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0