aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ext/win32ole/win32ole.c5
-rw-r--r--test/win32ole/test_win32ole.rb3
3 files changed, 14 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 1b7c13349c..19174af8a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sun Dec 13 18:19:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32ole/win32ole.c (ole_vstr2wc): check argument type, vstr
+ must be a String here. reported by Marcin 'Icewall' Noga of
+ Cisco Talos.
+
Sun Dec 13 16:41:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* configure.in (BOOTSTRAPRUBY): make BASERUBY full path before
diff --git a/ext/win32ole/win32ole.c b/ext/win32ole/win32ole.c
index 14147ab7bc..02ad82b4d4 100644
--- a/ext/win32ole/win32ole.c
+++ b/ext/win32ole/win32ole.c
@@ -860,6 +860,11 @@ ole_vstr2wc(VALUE vstr)
LPWSTR pw;
st_data_t data;
struct st_table *tbl = DATA_PTR(enc2cp_hash);
+
+ /* do not type-conversion here to prevent from other arguments
+ * changing (if exist) */
+ Check_Type(vstr, T_STRING);
+
enc = rb_enc_get(vstr);
if (st_lookup(tbl, (VALUE)enc | FIXNUM_FLAG, &data)) {
diff --git a/test/win32ole/test_win32ole.rb b/test/win32ole/test_win32ole.rb
index b41fd591fe..6cf2b3ce3f 100644
--- a/test/win32ole/test_win32ole.rb
+++ b/test/win32ole/test_win32ole.rb
@@ -312,6 +312,9 @@ if defined?(WIN32OLE)
assert_raise(ArgumentError) {
shell.ole_query_interface
}
+ assert_raise(TypeError) {
+ shell.ole_query_interface(0x11223344)
+ }
shell2 = shell.ole_query_interface('{A4C6892C-3BA9-11D2-9DEA-00C04FB16162}')
assert_instance_of(WIN32OLE, shell2)
end