tk 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/MANUAL_tcltklib.eng +0 -2
  4. data/MANUAL_tcltklib.ja +0 -2
  5. data/README.ActiveTcl +1 -1
  6. data/README.md +43 -0
  7. data/ext/tk/extconf.rb +4 -2
  8. data/ext/tk/old-extconf.rb +0 -1
  9. data/ext/tk/tcltklib.c +46 -148
  10. data/ext/tk/tkutil/extconf.rb +0 -2
  11. data/ext/tk/tkutil/tkutil.c +6 -9
  12. data/lib/multi-tk.rb +95 -315
  13. data/lib/remote-tk.rb +6 -23
  14. data/lib/tk.rb +41 -122
  15. data/lib/tk/bgerror.rb +2 -2
  16. data/lib/tk/bindtag.rb +1 -1
  17. data/lib/tk/canvas.rb +6 -14
  18. data/lib/tk/canvastag.rb +8 -16
  19. data/lib/tk/font.rb +1 -1
  20. data/lib/tk/fontchooser.rb +1 -1
  21. data/lib/tk/image.rb +1 -1
  22. data/lib/tk/menu.rb +4 -4
  23. data/lib/tk/msgcat.rb +5 -5
  24. data/lib/tk/namespace.rb +12 -32
  25. data/lib/tk/optiondb.rb +3 -73
  26. data/lib/tk/scale.rb +2 -2
  27. data/lib/tk/scrollable.rb +4 -2
  28. data/lib/tk/selection.rb +5 -4
  29. data/lib/tk/text.rb +8 -16
  30. data/lib/tk/textmark.rb +1 -1
  31. data/lib/tk/texttag.rb +7 -15
  32. data/lib/tk/timer.rb +2 -2
  33. data/lib/tk/tk_mac.rb +18 -18
  34. data/lib/tk/validation.rb +4 -35
  35. data/lib/tk/variable.rb +7 -5
  36. data/lib/tk/virtevent.rb +1 -1
  37. data/lib/tkextlib/blt/barchart.rb +0 -17
  38. data/lib/tkextlib/blt/bitmap.rb +1 -1
  39. data/lib/tkextlib/blt/component.rb +34 -34
  40. data/lib/tkextlib/blt/dragdrop.rb +6 -6
  41. data/lib/tkextlib/blt/graph.rb +0 -17
  42. data/lib/tkextlib/blt/stripchart.rb +0 -17
  43. data/lib/tkextlib/blt/tabset.rb +16 -31
  44. data/lib/tkextlib/blt/tree.rb +5 -5
  45. data/lib/tkextlib/blt/treeview.rb +14 -14
  46. data/lib/tkextlib/blt/watch.rb +1 -1
  47. data/lib/tkextlib/bwidget/labelentry.rb +6 -14
  48. data/lib/tkextlib/bwidget/listbox.rb +13 -29
  49. data/lib/tkextlib/bwidget/notebook.rb +6 -14
  50. data/lib/tkextlib/bwidget/spinbox.rb +6 -14
  51. data/lib/tkextlib/bwidget/tree.rb +19 -35
  52. data/lib/tkextlib/itcl/incr_tcl.rb +2 -2
  53. data/lib/tkextlib/itk/incr_tk.rb +7 -29
  54. data/lib/tkextlib/iwidgets/calendar.rb +0 -15
  55. data/lib/tkextlib/iwidgets/entryfield.rb +0 -21
  56. data/lib/tkextlib/iwidgets/notebook.rb +2 -2
  57. data/lib/tkextlib/iwidgets/scrolledcanvas.rb +6 -14
  58. data/lib/tkextlib/iwidgets/tabnotebook.rb +2 -2
  59. data/lib/tkextlib/tcllib/ctext.rb +2 -2
  60. data/lib/tkextlib/tcllib/plotchart.rb +5 -5
  61. data/lib/tkextlib/tcllib/validator.rb +6 -6
  62. data/lib/tkextlib/tile.rb +1 -1
  63. data/lib/tkextlib/tile/style.rb +1 -1
  64. data/lib/tkextlib/tile/treeview.rb +13 -20
  65. data/lib/tkextlib/tkDND/tkdnd.rb +6 -22
  66. data/lib/tkextlib/tkHTML/htmlwidget.rb +1 -1
  67. data/lib/tkextlib/tktable/tktable.rb +1 -1
  68. data/lib/tkextlib/treectrl/tktreectrl.rb +12 -20
  69. data/lib/tkextlib/vu/pie.rb +1 -1
  70. data/sample/binding_sample.rb +2 -2
  71. data/sample/cmd_res_test.rb +1 -1
  72. data/sample/demos-en/widget +21 -21
  73. data/sample/demos-jp/widget +4 -4
  74. data/sample/multi-ip_sample.rb +0 -3
  75. data/sample/multi-ip_sample2.rb +1 -1
  76. data/sample/resource.en +3 -3
  77. data/sample/resource.ja +3 -3
  78. data/sample/tcltklib/sample1.rb +2 -2
  79. data/sample/tkballoonhelp.rb +2 -2
  80. data/sample/tkextlib/tkHTML/ss.rb +0 -6
  81. data/sample/tkmulticolumnlist.rb +2 -2
  82. data/sample/tkmultilistframe.rb +2 -2
  83. data/sample/tkoptdb.rb +14 -16
  84. data/tk.gemspec +4 -4
  85. metadata +6 -13
  86. data/ChangeLog.tkextlib +0 -949
  87. data/old-README.tcltklib.ja +0 -159
  88. data/sample/binstr_usage.rb +0 -46
  89. data/sample/remote-ip_sample2.rb +0 -57
  90. data/sample/safe-tk.rb +0 -132
  91. data/sample/tkoptdb-safeTk.rb +0 -74
  92. data/sample/tktree.rb +0 -104
  93. data/sample/tktree.tcl +0 -305
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e3dda01b6b41bfb93fabae1a0f04c47cb9cc5cee
4
- data.tar.gz: f92e1763b14b39edf8ea046b7c63637e64c212ad
2
+ SHA256:
3
+ metadata.gz: de793924acb0bcb31d9cf7810b29ee8b955498771677127d14a8f84a0be28447
4
+ data.tar.gz: 624bf1e5f517b16c2147b43b840189f711f91c585edda293ba55585dde6d2901
5
5
  SHA512:
6
- metadata.gz: 116138a07d5a38c51278ad930d30771c700a570d136c6e29ca384f35044f592a4408f3b08b79f830526de4715282d15f13625221b2d8523f752c0a6fabb87142
7
- data.tar.gz: 6983ca5706d8a61e35a2ed0ef413fb66d1e679afcda3a0c028b2651727967745d8a20aa7f44a4cc061121ed09ea36e4e4c7f1ce3b7781a5390224c8aa06c9f00
6
+ metadata.gz: 496b71be86f3fad9951713a33c51cc2df0362914717adc915977d93b6197c5770938c82013cb84e97a1893e4489c549159ddbd96e2f1d42362d881ec50c6970e
7
+ data.tar.gz: 39d4d96c72e0484684f0048f01fd7df53ce8ad20158c9a14d82de0d93c1732f9eab52e83003d4d4084743bde9898c91044b909e82eebf0b098329a666cc1a111
data/.gitignore CHANGED
@@ -7,4 +7,6 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /lib/*.so
11
+ /*.gem
10
12
  *.bundle
@@ -171,8 +171,6 @@ module TclTklib
171
171
  : a target event.
172
172
  : If set DONT_WAIT flag and no event for processing, returns
173
173
  : false immediately.
174
- : If $SAFE >= 1 and the flag is tainted,
175
- : force to set DONT_WAIT flag.
176
174
 
177
175
  set_eventloop_tick(timer_tick)
178
176
  : Define the interval of thread-switching with an integer
@@ -272,8 +272,6 @@ require "tcltklib" すると, 以下のモジュール, クラスが利用可能
272
272
  : 象となっている種類のイベントが発生するまで待ち続ける.
273
273
  : DONT_WAIT を指定していた場合,処理対象イベントがなくても
274
274
  : すぐに終了し false を返す.
275
- : $SAFE >= 1 かつ flag が汚染されているならば
276
- : flag には DONT_WAIT が強制的に付けられる.
277
275
 
278
276
  set_eventloop_tick(timer_tick)
279
277
  : イベントループと同時に別スレッドが稼働している場合に,時
@@ -1,6 +1,6 @@
1
1
  ActiveTcl is ActiveState's quality-assured distribution of Tcl.
2
2
 
3
- # see <http://www.activestate.com/Products/ActiveTcl/>
3
+ # see <https://www.activestate.com/products/tcl/tcl-tk-modules/>
4
4
  # <http://www.tcl.tk/>
5
5
 
6
6
  First of all, please try to configure without any options.
data/README.md CHANGED
@@ -18,6 +18,49 @@ Or install it yourself as:
18
18
 
19
19
  $ gem install tk
20
20
 
21
+ ## Documentation
22
+
23
+ ### Read this first
24
+
25
+ If you want to use Ruby/Tk (tk.rb and so on), you must have tcltklib.so
26
+ which is working correctly. When you have some troubles on compiling,
27
+ please read [README.tcltklib] and [README.ActiveTcl].
28
+
29
+ Even if there is a tcltklib.so on your Ruby library directory, it will not
30
+ work without Tcl/Tk libraries (e.g. libtcl8.4.so) on your environment.
31
+ You must also check that your Tcl/Tk is installed properly.
32
+
33
+ --------------------------------------------
34
+
35
+ Ruby/Tk (tk.rb など) を使いたい場合には,tcltklib.so が正しく動いていな
36
+ ければなりません.コンパイル時に何か問題が生じた場合は,[README.tcltklib]
37
+ や [README.ActiveTcl] を見てください.
38
+
39
+ たとえ Ruby のライブラリディレクトリに tcltklib.so が存在していたとして
40
+ も,実行環境に Tcl/Tk ライブラリ (libtcl8.4.so など) がなければ機能しま
41
+ せん.Tcl/Tk が正しくインストールされているかもチェックしてください.
42
+
43
+ <tt>==========================================================
44
+ Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</tt>
45
+
46
+ ### Manual
47
+
48
+ - [Manual tcltklib, in English](MANUAL_tcltklib.eng)
49
+ - [Manual tcltklib, in Japanese](MANUAL_tcltklib.ja)
50
+
51
+ ### Other documents
52
+
53
+ [README.tcltklib] for compilation instructions.
54
+
55
+ [README.fork] is a note on forking.
56
+
57
+ [README.macosx-aqua] is about MacOS X Aqua usage.
58
+
59
+ [README.tcltklib]: README.tcltklib
60
+ [README.ActiveTcl]: README.ActiveTcl
61
+ [README.fork]: README.fork
62
+ [README.macosx-aqua]: README.macosx-aqua
63
+
21
64
  ## Development
22
65
 
23
66
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -5,6 +5,8 @@
5
5
  ##############################################################
6
6
  require 'mkmf'
7
7
 
8
+ $CFLAGS << " -DNO_TAINT" if RUBY_VERSION >= '2.7'
9
+
8
10
  TkLib_Config = {}
9
11
  TkLib_Config['search_versions'] =
10
12
  # %w[8.9 8.8 8.7 8.6 8.5 8.4 8.3 8.2 8.1 8.0 7.6 4.2]
@@ -1810,8 +1812,8 @@ end
1810
1812
  # check header file
1811
1813
  print("check functions.")
1812
1814
 
1813
- %w"ruby_native_thread_p rb_errinfo rb_safe_level rb_hash_lookup
1814
- rb_proc_new rb_obj_untrust rb_obj_taint rb_set_safe_level_force
1815
+ %w"ruby_native_thread_p rb_errinfo rb_hash_lookup
1816
+ rb_proc_new
1815
1817
  rb_sourcefile rb_thread_alive_p rb_thread_check_trap_pending
1816
1818
  ruby_enc_find_basename
1817
1819
  ".each do |func|
@@ -8,7 +8,6 @@ is_win32 = (/mswin|mingw|cygwin|bccwin/ =~ RUBY_PLATFORM)
8
8
 
9
9
  have_func("ruby_native_thread_p", "ruby.h")
10
10
  have_func("rb_errinfo", "ruby.h")
11
- have_func("rb_safe_level", "ruby.h")
12
11
  have_struct_member("struct RArray", "ptr", "ruby.h")
13
12
  have_struct_member("struct RArray", "len", "ruby.h")
14
13
 
@@ -46,11 +46,15 @@ int rb_thread_check_trap_pending(void);
46
46
  #define RARRAY_AREF(a, i) RARRAY_CONST_PTR(a)[i]
47
47
  #endif
48
48
 
49
+ #ifdef NO_TAINT
50
+ #define RbTk_OBJ_UNTRUST(x) do {} while (0)
51
+ #else
49
52
  #ifdef OBJ_UNTRUST
50
53
  #define RbTk_OBJ_UNTRUST(x) do {OBJ_TAINT(x); OBJ_UNTRUST(x);} while (0)
51
54
  #else
52
55
  #define RbTk_OBJ_UNTRUST(x) OBJ_TAINT(x)
53
56
  #endif
57
+ #endif
54
58
  #define RbTk_ALLOC_N(type, n) (type *)ckalloc((int)(sizeof(type) * (n)))
55
59
 
56
60
  #if defined(HAVE_RB_PROC_NEW) && !defined(RUBY_VM)
@@ -97,9 +101,6 @@ extern VALUE rb_proc_new _((VALUE (*)(ANYARGS/* VALUE yieldarg[, VALUE procarg]
97
101
  #else
98
102
  VALUE rb_errinfo(void);
99
103
  #endif
100
- #ifndef HAVE_RB_SAFE_LEVEL
101
- #define rb_safe_level() (ruby_safe_level+0)
102
- #endif
103
104
  #ifndef HAVE_RB_SOURCEFILE
104
105
  #define rb_sourcefile() (ruby_sourcefile+0)
105
106
  #endif
@@ -255,7 +256,6 @@ static VALUE ip_invoke_real _((int, VALUE*, VALUE));
255
256
  static VALUE ip_invoke _((int, VALUE*, VALUE));
256
257
  static VALUE ip_invoke_with_position _((int, VALUE*, VALUE, Tcl_QueuePosition));
257
258
  static VALUE tk_funcall _((VALUE(), int, VALUE*, VALUE));
258
- static VALUE callq_safelevel_handler _((VALUE, VALUE));
259
259
 
260
260
  /* Tcl's object type */
261
261
  #if TCL_MAJOR_VERSION >= 8
@@ -420,7 +420,6 @@ struct invoke_queue {
420
420
  #endif
421
421
  VALUE interp;
422
422
  int *done;
423
- int safe_level;
424
423
  VALUE result;
425
424
  VALUE thread;
426
425
  };
@@ -431,7 +430,6 @@ struct eval_queue {
431
430
  int len;
432
431
  VALUE interp;
433
432
  int *done;
434
- int safe_level;
435
433
  VALUE result;
436
434
  VALUE thread;
437
435
  };
@@ -443,7 +441,6 @@ struct call_queue {
443
441
  VALUE *argv;
444
442
  VALUE interp;
445
443
  int *done;
446
- int safe_level;
447
444
  VALUE result;
448
445
  VALUE thread;
449
446
  };
@@ -3620,10 +3617,10 @@ ip_ruby_cmd(clientData, interp, argc, argv)
3620
3617
  VALUE s;
3621
3618
  #if TCL_MAJOR_VERSION >= 8
3622
3619
  str = Tcl_GetStringFromObj(argv[i], &len);
3623
- s = rb_tainted_str_new(str, len);
3620
+ s = rb_str_new(str, len);
3624
3621
  #else /* TCL_MAJOR_VERSION < 8 */
3625
3622
  str = argv[i];
3626
- s = rb_tainted_str_new2(str);
3623
+ s = rb_str_new2(str);
3627
3624
  #endif
3628
3625
  DUMP2("arg:%s",str);
3629
3626
  rb_ary_push(args, s);
@@ -6254,19 +6251,25 @@ ip_init(argc, argv, self)
6254
6251
  st = ruby_tcl_stubs_init();
6255
6252
  /* from Tcl_AppInit() */
6256
6253
  if (with_tk) {
6254
+ const char *error;
6257
6255
  DUMP1("Tk_Init");
6258
6256
  st = ruby_tk_stubs_init(ptr->ip);
6257
+ if (st != TCLTK_STUBS_OK) {
6258
+ error = Tcl_GetStringResult(ptr->ip);
6259
+ ip_finalize(ptr->ip);
6260
+ Tcl_DeleteInterp(ptr->ip);
6261
+ Tcl_Release(ptr->ip);
6262
+ ptr->ip = (Tcl_Interp*)NULL;
6263
+ }
6259
6264
  switch(st) {
6260
6265
  case TCLTK_STUBS_OK:
6261
6266
  break;
6262
6267
  case NO_Tk_Init:
6263
6268
  rb_raise(rb_eLoadError, "tcltklib: can't find Tk_Init()");
6264
6269
  case FAIL_Tk_Init:
6265
- rb_raise(rb_eRuntimeError, "tcltklib: fail to Tk_Init(). %s",
6266
- Tcl_GetStringResult(ptr->ip));
6270
+ rb_raise(rb_eRuntimeError, "tcltklib: fail to Tk_Init(). %s", error);
6267
6271
  case FAIL_Tk_InitStubs:
6268
- rb_raise(rb_eRuntimeError, "tcltklib: fail to Tk_InitStubs(). %s",
6269
- Tcl_GetStringResult(ptr->ip));
6272
+ rb_raise(rb_eRuntimeError, "tcltklib: fail to Tk_InitStubs(). %s", error);
6270
6273
  default:
6271
6274
  rb_raise(rb_eRuntimeError, "tcltklib: unknown error(%d) on ruby_tk_stubs_init", st);
6272
6275
  }
@@ -6946,24 +6949,10 @@ ip_get_result_string_obj(interp)
6946
6949
  Tcl_DecrRefCount(retObj);
6947
6950
  return strval;
6948
6951
  #else
6949
- return rb_tainted_str_new2(interp->result);
6952
+ return rb_str_new2(interp->result);
6950
6953
  #endif
6951
6954
  }
6952
6955
 
6953
- /* call Tcl/Tk functions on the eventloop thread */
6954
- static VALUE
6955
- callq_safelevel_handler(arg, callq)
6956
- VALUE arg;
6957
- VALUE callq;
6958
- {
6959
- struct call_queue *q;
6960
-
6961
- Data_Get_Struct(callq, struct call_queue, q);
6962
- DUMP2("(safe-level handler) $SAFE = %d", q->safe_level);
6963
- rb_set_safe_level(q->safe_level);
6964
- return((q->func)(q->interp, q->argc, q->argv));
6965
- }
6966
-
6967
6956
  static int call_queue_handler _((Tcl_Event *, int));
6968
6957
  static int
6969
6958
  call_queue_handler(evPtr, flags)
@@ -7006,19 +6995,9 @@ call_queue_handler(evPtr, flags)
7006
6995
  /* incr internal handler mark */
7007
6996
  rbtk_internal_eventloop_handler++;
7008
6997
 
7009
- /* check safe-level */
7010
- if (rb_safe_level() != q->safe_level) {
7011
- /* q_dat = Data_Wrap_Struct(rb_cData,0,-1,q); */
7012
- q_dat = Data_Wrap_Struct(0,call_queue_mark,-1,q);
7013
- ret = rb_funcall(rb_proc_new(callq_safelevel_handler, q_dat),
7014
- ID_call, 0);
7015
- rb_gc_force_recycle(q_dat);
7016
- q_dat = (VALUE)NULL;
7017
- } else {
7018
- DUMP2("call function (for caller thread:%"PRIxVALUE")", thread);
7019
- DUMP2("call function (current thread:%"PRIxVALUE")", rb_thread_current());
7020
- ret = (q->func)(q->interp, q->argc, q->argv);
7021
- }
6998
+ DUMP2("call function (for caller thread:%"PRIxVALUE")", thread);
6999
+ DUMP2("call function (current thread:%"PRIxVALUE")", rb_thread_current());
7000
+ ret = (q->func)(q->interp, q->argc, q->argv);
7022
7001
 
7023
7002
  /* set result */
7024
7003
  RARRAY_ASET(q->result, 0, ret);
@@ -7155,7 +7134,6 @@ tk_funcall(func, argc, argv, obj)
7155
7134
  callq->interp = ip_obj;
7156
7135
  callq->result = result;
7157
7136
  callq->thread = current;
7158
- callq->safe_level = rb_safe_level();
7159
7137
  callq->ev.proc = call_queue_handler;
7160
7138
 
7161
7139
  /* add the handler to Tcl event queue */
@@ -7303,7 +7281,7 @@ ip_eval_real(self, cmd_str, cmd_len)
7303
7281
  Tcl_DecrRefCount(cmd);
7304
7282
  rb_thread_critical = thr_crit_bup;
7305
7283
  ptr->return_value = TCL_OK;
7306
- return rb_tainted_str_new2("");
7284
+ return rb_str_new2("");
7307
7285
  } else {
7308
7286
  int status;
7309
7287
  struct call_eval_info inf;
@@ -7379,7 +7357,7 @@ ip_eval_real(self, cmd_str, cmd_len)
7379
7357
  Tcl_ResetResult(ptr->ip);
7380
7358
  rbtk_release_ip(ptr);
7381
7359
  rb_thread_critical = thr_crit_bup;
7382
- return rb_tainted_str_new2("");
7360
+ return rb_str_new2("");
7383
7361
  }
7384
7362
  }
7385
7363
 
@@ -7395,7 +7373,7 @@ ip_eval_real(self, cmd_str, cmd_len)
7395
7373
  /* ip is deleted? */
7396
7374
  if (deleted_ip(ptr)) {
7397
7375
  ptr->return_value = TCL_OK;
7398
- return rb_tainted_str_new2("");
7376
+ return rb_str_new2("");
7399
7377
  } else {
7400
7378
  /* Tcl_Preserve(ptr->ip); */
7401
7379
  rbtk_preserve_ip(ptr);
@@ -7438,19 +7416,6 @@ ip_eval_real(self, cmd_str, cmd_len)
7438
7416
  #endif
7439
7417
  }
7440
7418
 
7441
- static VALUE
7442
- evq_safelevel_handler(arg, evq)
7443
- VALUE arg;
7444
- VALUE evq;
7445
- {
7446
- struct eval_queue *q;
7447
-
7448
- Data_Get_Struct(evq, struct eval_queue, q);
7449
- DUMP2("(safe-level handler) $SAFE = %d", q->safe_level);
7450
- rb_set_safe_level(q->safe_level);
7451
- return ip_eval_real(q->interp, q->str, q->len);
7452
- }
7453
-
7454
7419
  int eval_queue_handler _((Tcl_Event *, int));
7455
7420
  int
7456
7421
  eval_queue_handler(evPtr, flags)
@@ -7493,24 +7458,7 @@ eval_queue_handler(evPtr, flags)
7493
7458
  /* incr internal handler mark */
7494
7459
  rbtk_internal_eventloop_handler++;
7495
7460
 
7496
- /* check safe-level */
7497
- if (rb_safe_level() != q->safe_level) {
7498
- #ifdef HAVE_NATIVETHREAD
7499
- #ifndef RUBY_USE_NATIVE_THREAD
7500
- if (!ruby_native_thread_p()) {
7501
- rb_bug("cross-thread violation on eval_queue_handler()");
7502
- }
7503
- #endif
7504
- #endif
7505
- /* q_dat = Data_Wrap_Struct(rb_cData,0,-1,q); */
7506
- q_dat = Data_Wrap_Struct(0,eval_queue_mark,-1,q);
7507
- ret = rb_funcall(rb_proc_new(evq_safelevel_handler, q_dat),
7508
- ID_call, 0);
7509
- rb_gc_force_recycle(q_dat);
7510
- q_dat = (VALUE)NULL;
7511
- } else {
7512
- ret = ip_eval_real(q->interp, q->str, q->len);
7513
- }
7461
+ ret = ip_eval_real(q->interp, q->str, q->len);
7514
7462
 
7515
7463
  /* set result */
7516
7464
  RARRAY_ASET(q->result, 0, ret);
@@ -7640,7 +7588,6 @@ ip_eval(self, str)
7640
7588
  evq->interp = ip_obj;
7641
7589
  evq->result = result;
7642
7590
  evq->thread = current;
7643
- evq->safe_level = rb_safe_level();
7644
7591
  evq->ev.proc = eval_queue_handler;
7645
7592
 
7646
7593
  position = TCL_QUEUE_TAIL;
@@ -7912,7 +7859,6 @@ lib_toUTF8_core(ip_obj, src, encodename)
7912
7859
  # endif
7913
7860
  Tcl_Encoding encoding;
7914
7861
  Tcl_DString dstr;
7915
- int taint_flag = OBJ_TAINTED(str);
7916
7862
  struct tcltkip *ptr;
7917
7863
  char *buf;
7918
7864
  int thr_crit_bup;
@@ -8033,13 +7979,12 @@ lib_toUTF8_core(ip_obj, src, encodename)
8033
7979
  /* Tcl_ExternalToUtfDString(encoding,buf,strlen(buf),&dstr); */
8034
7980
  Tcl_ExternalToUtfDString(encoding, buf, RSTRING_LENINT(str), &dstr);
8035
7981
 
8036
- /* str = rb_tainted_str_new2(Tcl_DStringValue(&dstr)); */
7982
+ /* str = rb_str_new2(Tcl_DStringValue(&dstr)); */
8037
7983
  /* str = rb_str_new2(Tcl_DStringValue(&dstr)); */
8038
7984
  str = rb_str_new(Tcl_DStringValue(&dstr), Tcl_DStringLength(&dstr));
8039
7985
  #ifdef HAVE_RUBY_ENCODING_H
8040
7986
  rb_enc_associate_index(str, ENCODING_INDEX_UTF8);
8041
7987
  #endif
8042
- if (taint_flag) RbTk_OBJ_UNTRUST(str);
8043
7988
  rb_ivar_set(str, ID_at_enc, ENCODING_NAME_UTF8);
8044
7989
 
8045
7990
  /*
@@ -8098,7 +8043,6 @@ lib_fromUTF8_core(ip_obj, src, encodename)
8098
8043
  Tcl_Interp *interp;
8099
8044
  Tcl_Encoding encoding;
8100
8045
  Tcl_DString dstr;
8101
- int taint_flag = OBJ_TAINTED(str);
8102
8046
  char *buf;
8103
8047
  int thr_crit_bup;
8104
8048
  #endif
@@ -8182,7 +8126,7 @@ lib_fromUTF8_core(ip_obj, src, encodename)
8182
8126
  tclstr = Tcl_NewStringObj(RSTRING_PTR(str), RSTRING_LENINT(str));
8183
8127
  Tcl_IncrRefCount(tclstr);
8184
8128
  s = (char*)Tcl_GetByteArrayFromObj(tclstr, &len);
8185
- str = rb_tainted_str_new(s, len);
8129
+ str = rb_str_new(s, len);
8186
8130
  s = (char*)NULL;
8187
8131
  Tcl_DecrRefCount(tclstr);
8188
8132
  #ifdef HAVE_RUBY_ENCODING_H
@@ -8211,7 +8155,7 @@ lib_fromUTF8_core(ip_obj, src, encodename)
8211
8155
 
8212
8156
  if (RSTRING_LEN(str) == 0) {
8213
8157
  rb_thread_critical = thr_crit_bup;
8214
- return rb_tainted_str_new2("");
8158
+ return rb_str_new2("");
8215
8159
  }
8216
8160
 
8217
8161
  buf = ALLOC_N(char, RSTRING_LEN(str)+1);
@@ -8224,7 +8168,7 @@ lib_fromUTF8_core(ip_obj, src, encodename)
8224
8168
  /* Tcl_UtfToExternalDString(encoding,buf,strlen(buf),&dstr); */
8225
8169
  Tcl_UtfToExternalDString(encoding,buf,RSTRING_LENINT(str),&dstr);
8226
8170
 
8227
- /* str = rb_tainted_str_new2(Tcl_DStringValue(&dstr)); */
8171
+ /* str = rb_str_new2(Tcl_DStringValue(&dstr)); */
8228
8172
  /* str = rb_str_new2(Tcl_DStringValue(&dstr)); */
8229
8173
  str = rb_str_new(Tcl_DStringValue(&dstr), Tcl_DStringLength(&dstr));
8230
8174
  #ifdef HAVE_RUBY_ENCODING_H
@@ -8241,7 +8185,6 @@ lib_fromUTF8_core(ip_obj, src, encodename)
8241
8185
  }
8242
8186
  #endif
8243
8187
 
8244
- if (taint_flag) RbTk_OBJ_UNTRUST(str);
8245
8188
  rb_ivar_set(str, ID_at_enc, encodename);
8246
8189
 
8247
8190
  /*
@@ -8297,7 +8240,6 @@ lib_UTF_backslash_core(self, str, all_bs)
8297
8240
  #ifdef TCL_UTF_MAX
8298
8241
  char *src_buf, *dst_buf, *ptr;
8299
8242
  int read_len = 0, dst_len = 0;
8300
- int taint_flag = OBJ_TAINTED(str);
8301
8243
  int thr_crit_bup;
8302
8244
 
8303
8245
  tcl_stubs_check();
@@ -8335,7 +8277,6 @@ lib_UTF_backslash_core(self, str, all_bs)
8335
8277
  }
8336
8278
 
8337
8279
  str = rb_str_new(dst_buf, dst_len);
8338
- if (taint_flag) RbTk_OBJ_UNTRUST(str);
8339
8280
  #ifdef HAVE_RUBY_ENCODING_H
8340
8281
  rb_enc_associate_index(str, ENCODING_INDEX_UTF8);
8341
8282
  #endif
@@ -8571,7 +8512,7 @@ ip_invoke_core(interp, argc, argv)
8571
8512
 
8572
8513
  /* ip is deleted? */
8573
8514
  if (deleted_ip(ptr)) {
8574
- return rb_tainted_str_new2("");
8515
+ return rb_str_new2("");
8575
8516
  }
8576
8517
 
8577
8518
  /* Tcl_Preserve(ptr->ip); */
@@ -8606,7 +8547,7 @@ ip_invoke_core(interp, argc, argv)
8606
8547
  Tcl_ResetResult(ptr->ip);
8607
8548
  /* Tcl_Release(ptr->ip); */
8608
8549
  rbtk_release_ip(ptr);
8609
- return rb_tainted_str_new2("");
8550
+ return rb_str_new2("");
8610
8551
  }
8611
8552
  } else {
8612
8553
  #if TCL_MAJOR_VERSION >= 8
@@ -8801,7 +8742,7 @@ ip_invoke_core(interp, argc, argv)
8801
8742
  rb_warn("%s (ignore)", Tcl_GetStringResult(ptr->ip));
8802
8743
  }
8803
8744
  Tcl_ResetResult(ptr->ip);
8804
- return rb_tainted_str_new2("");
8745
+ return rb_str_new2("");
8805
8746
  }
8806
8747
  }
8807
8748
 
@@ -8928,7 +8869,7 @@ ip_invoke_real(argc, argv, interp)
8928
8869
 
8929
8870
  /* ip is deleted? */
8930
8871
  if (deleted_ip(ptr)) {
8931
- return rb_tainted_str_new2("");
8872
+ return rb_str_new2("");
8932
8873
  }
8933
8874
 
8934
8875
  /* allocate memory for arguments */
@@ -8944,19 +8885,6 @@ ip_invoke_real(argc, argv, interp)
8944
8885
  return v;
8945
8886
  }
8946
8887
 
8947
- VALUE
8948
- ivq_safelevel_handler(arg, ivq)
8949
- VALUE arg;
8950
- VALUE ivq;
8951
- {
8952
- struct invoke_queue *q;
8953
-
8954
- Data_Get_Struct(ivq, struct invoke_queue, q);
8955
- DUMP2("(safe-level handler) $SAFE = %d", q->safe_level);
8956
- rb_set_safe_level(q->safe_level);
8957
- return ip_invoke_core(q->interp, q->argc, q->argv);
8958
- }
8959
-
8960
8888
  int invoke_queue_handler _((Tcl_Event *, int));
8961
8889
  int
8962
8890
  invoke_queue_handler(evPtr, flags)
@@ -8999,19 +8927,9 @@ invoke_queue_handler(evPtr, flags)
8999
8927
  /* incr internal handler mark */
9000
8928
  rbtk_internal_eventloop_handler++;
9001
8929
 
9002
- /* check safe-level */
9003
- if (rb_safe_level() != q->safe_level) {
9004
- /* q_dat = Data_Wrap_Struct(rb_cData,0,0,q); */
9005
- q_dat = Data_Wrap_Struct(0,invoke_queue_mark,-1,q);
9006
- ret = rb_funcall(rb_proc_new(ivq_safelevel_handler, q_dat),
9007
- ID_call, 0);
9008
- rb_gc_force_recycle(q_dat);
9009
- q_dat = (VALUE)NULL;
9010
- } else {
9011
- DUMP2("call invoke_real (for caller thread:%"PRIxVALUE")", thread);
9012
- DUMP2("call invoke_real (current thread:%"PRIxVALUE")", rb_thread_current());
9013
- ret = ip_invoke_core(q->interp, q->argc, q->argv);
9014
- }
8930
+ DUMP2("call invoke_real (for caller thread:%"PRIxVALUE")", thread);
8931
+ DUMP2("call invoke_real (current thread:%"PRIxVALUE")", rb_thread_current());
8932
+ ret = ip_invoke_core(q->interp, q->argc, q->argv);
9015
8933
 
9016
8934
  /* set result */
9017
8935
  RARRAY_ASET(q->result, 0, ret);
@@ -9141,7 +9059,6 @@ ip_invoke_with_position(argc, argv, obj, position)
9141
9059
  ivq->interp = ip_obj;
9142
9060
  ivq->result = result;
9143
9061
  ivq->thread = current;
9144
- ivq->safe_level = rb_safe_level();
9145
9062
  ivq->ev.proc = invoke_queue_handler;
9146
9063
 
9147
9064
  /* add the handler to Tcl event queue */
@@ -9239,7 +9156,7 @@ ip_retval(self)
9239
9156
 
9240
9157
  /* ip is deleted? */
9241
9158
  if (deleted_ip(ptr)) {
9242
- return rb_tainted_str_new2("");
9159
+ return rb_str_new2("");
9243
9160
  }
9244
9161
 
9245
9162
  return (INT2FIX(ptr->return_value));
@@ -9296,7 +9213,7 @@ ip_get_variable2_core(interp, argc, argv)
9296
9213
  /* ip is deleted? */
9297
9214
  if (deleted_ip(ptr)) {
9298
9215
  rb_thread_critical = thr_crit_bup;
9299
- return rb_tainted_str_new2("");
9216
+ return rb_str_new2("");
9300
9217
  } else {
9301
9218
  /* Tcl_Preserve(ptr->ip); */
9302
9219
  rbtk_preserve_ip(ptr);
@@ -9334,7 +9251,7 @@ ip_get_variable2_core(interp, argc, argv)
9334
9251
 
9335
9252
  /* ip is deleted? */
9336
9253
  if (deleted_ip(ptr)) {
9337
- return rb_tainted_str_new2("");
9254
+ return rb_str_new2("");
9338
9255
  } else {
9339
9256
  /* Tcl_Preserve(ptr->ip); */
9340
9257
  rbtk_preserve_ip(ptr);
@@ -9352,7 +9269,7 @@ ip_get_variable2_core(interp, argc, argv)
9352
9269
  return exc;
9353
9270
  }
9354
9271
 
9355
- strval = rb_tainted_str_new2(ret);
9272
+ strval = rb_str_new2(ret);
9356
9273
  /* Tcl_Release(ptr->ip); */
9357
9274
  rbtk_release_ip(ptr);
9358
9275
  rb_thread_critical = thr_crit_bup;
@@ -9382,7 +9299,7 @@ ip_get_variable2(self, varname, index, flag)
9382
9299
  retval = tk_funcall(ip_get_variable2_core, 3, argv, self);
9383
9300
 
9384
9301
  if (NIL_P(retval)) {
9385
- return rb_tainted_str_new2("");
9302
+ return rb_str_new2("");
9386
9303
  } else {
9387
9304
  return retval;
9388
9305
  }
@@ -9433,7 +9350,7 @@ ip_set_variable2_core(interp, argc, argv)
9433
9350
  if (deleted_ip(ptr)) {
9434
9351
  Tcl_DecrRefCount(valobj);
9435
9352
  rb_thread_critical = thr_crit_bup;
9436
- return rb_tainted_str_new2("");
9353
+ return rb_str_new2("");
9437
9354
  } else {
9438
9355
  /* Tcl_Preserve(ptr->ip); */
9439
9356
  rbtk_preserve_ip(ptr);
@@ -9474,7 +9391,7 @@ ip_set_variable2_core(interp, argc, argv)
9474
9391
 
9475
9392
  /* ip is deleted? */
9476
9393
  if (deleted_ip(ptr)) {
9477
- return rb_tainted_str_new2("");
9394
+ return rb_str_new2("");
9478
9395
  } else {
9479
9396
  /* Tcl_Preserve(ptr->ip); */
9480
9397
  rbtk_preserve_ip(ptr);
@@ -9487,7 +9404,7 @@ ip_set_variable2_core(interp, argc, argv)
9487
9404
  return rb_exc_new2(rb_eRuntimeError, ptr->ip->result);
9488
9405
  }
9489
9406
 
9490
- strval = rb_tainted_str_new2(ret);
9407
+ strval = rb_str_new2(ret);
9491
9408
 
9492
9409
  /* Tcl_Release(ptr->ip); */
9493
9410
  rbtk_release_ip(ptr);
@@ -9521,7 +9438,7 @@ ip_set_variable2(self, varname, index, value, flag)
9521
9438
  retval = tk_funcall(ip_set_variable2_core, 4, argv, self);
9522
9439
 
9523
9440
  if (NIL_P(retval)) {
9524
- return rb_tainted_str_new2("");
9441
+ return rb_str_new2("");
9525
9442
  } else {
9526
9443
  return retval;
9527
9444
  }
@@ -9596,7 +9513,7 @@ ip_unset_variable2(self, varname, index, flag)
9596
9513
  retval = tk_funcall(ip_unset_variable2_core, 3, argv, self);
9597
9514
 
9598
9515
  if (NIL_P(retval)) {
9599
- return rb_tainted_str_new2("");
9516
+ return rb_str_new2("");
9600
9517
  } else {
9601
9518
  return retval;
9602
9519
  }
@@ -9680,7 +9597,6 @@ lib_split_tklist_core(ip_obj, list_str)
9680
9597
  Tcl_Interp *interp;
9681
9598
  volatile VALUE ary, elem;
9682
9599
  int idx;
9683
- int taint_flag = OBJ_TAINTED(list_str);
9684
9600
  #ifdef HAVE_RUBY_ENCODING_H
9685
9601
  int list_enc_idx;
9686
9602
  volatile VALUE list_ivar_enc;
@@ -9735,13 +9651,11 @@ lib_split_tklist_core(ip_obj, list_str)
9735
9651
  rb_thread_critical = Qtrue;
9736
9652
 
9737
9653
  ary = rb_ary_new2(objc);
9738
- if (taint_flag) RbTk_OBJ_UNTRUST(ary);
9739
9654
 
9740
9655
  old_gc = rb_gc_disable();
9741
9656
 
9742
9657
  for(idx = 0; idx < objc; idx++) {
9743
9658
  elem = get_str_from_obj(objv[idx]);
9744
- if (taint_flag) RbTk_OBJ_UNTRUST(elem);
9745
9659
 
9746
9660
  #ifdef HAVE_RUBY_ENCODING_H
9747
9661
  if (rb_enc_get_index(elem) == ENCODING_INDEX_BINARY) {
@@ -9783,16 +9697,11 @@ lib_split_tklist_core(ip_obj, list_str)
9783
9697
  }
9784
9698
 
9785
9699
  ary = rb_ary_new2(argc);
9786
- if (taint_flag) RbTk_OBJ_UNTRUST(ary);
9787
9700
 
9788
9701
  old_gc = rb_gc_disable();
9789
9702
 
9790
9703
  for(idx = 0; idx < argc; idx++) {
9791
- if (taint_flag) {
9792
- elem = rb_tainted_str_new2(argv[idx]);
9793
- } else {
9794
- elem = rb_str_new2(argv[idx]);
9795
- }
9704
+ elem = rb_str_new2(argv[idx]);
9796
9705
  /* rb_ivar_set(elem, ID_at_enc, rb_str_new2("binary")); */
9797
9706
  /* RARRAY(ary)->ptr[idx] = elem; */
9798
9707
  rb_ary_push(ary, elem)
@@ -9833,7 +9742,6 @@ lib_merge_tklist(argc, argv, obj)
9833
9742
  int *flagPtr;
9834
9743
  char *dst, *result;
9835
9744
  volatile VALUE str;
9836
- int taint_flag = 0;
9837
9745
  int thr_crit_bup;
9838
9746
  VALUE old_gc;
9839
9747
 
@@ -9855,7 +9763,6 @@ lib_merge_tklist(argc, argv, obj)
9855
9763
  /* pass 1 */
9856
9764
  len = 1;
9857
9765
  for(num = 0; num < argc; num++) {
9858
- if (OBJ_TAINTED(argv[num])) taint_flag = 1;
9859
9766
  dst = StringValueCStr(argv[num]);
9860
9767
  #if TCL_MAJOR_VERSION >= 8
9861
9768
  len += Tcl_ScanCountedElement(dst, RSTRING_LENINT(argv[num]),
@@ -9903,7 +9810,6 @@ lib_merge_tklist(argc, argv, obj)
9903
9810
 
9904
9811
  /* create object */
9905
9812
  str = rb_str_new(result, dst - result - 1);
9906
- if (taint_flag) RbTk_OBJ_UNTRUST(str);
9907
9813
  #if 0 /* use Tcl_EventuallyFree */
9908
9814
  Tcl_EventuallyFree((ClientData)result, TCL_DYNAMIC); /* XXXXXXXX */
9909
9815
  #else
@@ -9928,7 +9834,6 @@ lib_conv_listelement(self, src)
9928
9834
  {
9929
9835
  int len, scan_flag;
9930
9836
  volatile VALUE dst;
9931
- int taint_flag = OBJ_TAINTED(src);
9932
9837
  int thr_crit_bup;
9933
9838
 
9934
9839
  tcl_stubs_check();
@@ -9951,7 +9856,6 @@ lib_conv_listelement(self, src)
9951
9856
  #endif
9952
9857
 
9953
9858
  rb_str_resize(dst, len);
9954
- if (taint_flag) RbTk_OBJ_UNTRUST(dst);
9955
9859
 
9956
9860
  rb_thread_critical = thr_crit_bup;
9957
9861
 
@@ -10417,12 +10321,6 @@ create_encoding_table_core(arg, interp)
10417
10321
  Tcl_Obj **objv;
10418
10322
  Tcl_Obj *enc_list;
10419
10323
 
10420
- #ifdef HAVE_RB_SET_SAFE_LEVEL_FORCE
10421
- rb_set_safe_level_force(0);
10422
- #else
10423
- rb_set_safe_level(0);
10424
- #endif
10425
-
10426
10324
  /* set 'binary' encoding */
10427
10325
  encobj = rb_enc_from_encoding(rb_enc_from_index(ENCODING_INDEX_BINARY));
10428
10326
  rb_hash_aset(table, ENCODING_NAME_BINARY, encobj);