From 80aae3dce3f5f4b89091f9f2f11b4d1aa11a00b7 Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 16 Jun 2000 07:44:16 +0000 Subject: 2000-06-16 git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@760 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'string.c') diff --git a/string.c b/string.c index d5de27864..f547323a5 100644 --- a/string.c +++ b/string.c @@ -1087,6 +1087,7 @@ rb_str_sub_bang(argc, argv, str) VALUE pat, repl, match; struct re_registers *regs; int iter = 0; + int tainted = 0; long plen; if (argc == 1 && rb_block_given_p()) { @@ -1094,6 +1095,7 @@ rb_str_sub_bang(argc, argv, str) } else if (argc == 2) { repl = rb_obj_as_string(argv[1]);; + if (OBJ_TAINTED(repl)) tainted = 1; } else { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)", argc); @@ -1113,6 +1115,7 @@ rb_str_sub_bang(argc, argv, str) else { repl = rb_reg_regsub(repl, str, regs); } + if (OBJ_TAINTED(repl)) tainted = 1; plen = END(0) - BEG(0); if (RSTRING(repl)->len > plen) { REALLOC_N(RSTRING(str)->ptr, char, @@ -1127,7 +1130,8 @@ rb_str_sub_bang(argc, argv, str) RSTRING(repl)->ptr, RSTRING(repl)->len); RSTRING(str)->len += RSTRING(repl)->len - plen; RSTRING(str)->ptr[RSTRING(str)->len] = '\0'; - OBJ_INFECT(str, repl); + if (tainted) OBJ_TAINT(str); + return str; } return Qnil; -- cgit