1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

win32ole.c: check arity

* ext/win32ole/win32ole.c (fole_missing): should check actual argument
  count before accessing.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40184 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2013-04-08 08:19:32 +00:00
parent 418b8e121c
commit 311960cdaf
3 changed files with 14 additions and 0 deletions

View file

@ -1,3 +1,8 @@
Mon Apr 8 17:19:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/win32ole/win32ole.c (fole_missing): should check actual argument
count before accessing.
Mon Apr 8 16:03:55 2013 Yuki Yugui Sonoda <yugui@google.com>
Fixes a build failure of ext/ripper/ripper.c on building out of place.

View file

@ -4078,6 +4078,7 @@ fole_missing(int argc, VALUE *argv, VALUE self)
ID id;
const char* mname;
int n;
rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
id = rb_to_id(argv[0]);
mname = rb_id2name(id);
if(!mname) {
@ -4085,6 +4086,7 @@ fole_missing(int argc, VALUE *argv, VALUE self)
}
n = strlen(mname);
if(mname[n-1] == '=') {
rb_check_arity(argc, 2, 2);
argv[0] = rb_enc_str_new(mname, n-1, cWIN32OLE_enc);
return ole_propertyput(self, argv[0], argv[1]);

View file

@ -495,6 +495,13 @@ if defined?(WIN32OLE)
def test_const_LOCALE_USER_DEFAULT
assert_equal(0x0400, WIN32OLE::LOCALE_USER_DEFAULT);
end
def test_method_missing
assert_raise(ArgumentError) {@dict1.method_missing}
assert_raise(TypeError) {@dict1.method_missing(1)}
assert_raise(ArgumentError) {@dict1.method_missing("foo=")}
assert_raise(ArgumentError) {@dict1.method_missing("foo=", 1, 2)}
end
end
# test of subclass of WIN32OLE