From: Yukihiro Matsumoto Date: 2006-03-26T02:14:34+09:00 Subject: Re: [BUG] ruby_script ? Hi, In message "Re: [BUG] ruby_script ?" on Sun, 26 Mar 2006 01:18:27 +0900, ts writes: | Well tk must at least call StringValuePtr() rather than trying to access | directly RSTRING(value)->ptr The attached are modifications for potential (but no sure) bugs. Note that it's not tested at all. Index: tcltklib.c =================================================================== RCS file: /var/cvs/src/ruby/ext/tk/tcltklib.c,v retrieving revision 1.44 diff -p -u -1 -r1.44 tcltklib.c --- tcltklib.c 6 Dec 2005 16:24:08 -0000 1.44 +++ tcltklib.c 25 Mar 2006 17:12:10 -0000 @@ -1142,4 +1142,7 @@ set_max_block_time(self, time) default: - rb_raise(rb_eArgError, "invalid value for time: '%s'", - RSTRING(rb_funcall(time, ID_inspect, 0, 0))->ptr); + { + VALUE tmp = rb_funcall(time, ID_inspect, 0, 0); + rb_raise(rb_eArgError, "invalid value for time: '%s'", + StringValuePtr(tmp)); + } } @@ -2134,2 +2137,3 @@ ip_set_exc_message(interp, exc) msg = rb_funcall(exc, ID_message, 0, 0); + StringValue(msg); @@ -4912,3 +4916,3 @@ ip_create_slave_core(interp, argc, argv) - slave->ip = Tcl_CreateSlave(master->ip, RSTRING(name)->ptr, safe); + slave->ip = Tcl_CreateSlave(master->ip, StringValuePtr(name), safe); if (slave->ip == NULL) { @@ -6194,2 +6198,3 @@ lib_fromUTF8_core(ip_obj, src, encodenam + StringValue(str); s = Tcl_GetByteArrayFromObj(Tcl_NewStringObj(RSTRING(str)->ptr, @@ -6373,3 +6378,3 @@ lib_set_system_encoding(self, enc_name) if (Tcl_SetSystemEncoding((Tcl_Interp *)NULL, - RSTRING(enc_name)->ptr) != TCL_OK) { + StringValuePtr(enc_name)) != TCL_OK) { rb_raise(rb_eArgError, "unknown encoding name '%s'", @@ -7931,3 +7936,3 @@ Init_tcltklib() - ret = ruby_open_tcl_dll(RSTRING(rb_argv0)->ptr); + ret = ruby_open_tcl_dll(rb_argv0 ? RSTRING(rb_argv0)->ptr : 0); switch(ret) {