From: Kazuhiro NISHIYAMA Date: 2002-06-17T11:14:57+09:00 Subject: [ruby-dev:17475] String#crypt always returns tainted string 西山和広です。 1.7でString#cryptが常にtaintな文字列を返すようになったのは 仕様変更でしょうか? % cat a.rb #!/usr/bin/ruby a,b = %w[string salt] c = a.crypt(b) p [ a.tainted?, b.tainted?, c.tainted? ] % ruby16 -v a.rb ruby 1.6.7 (2002-06-15) [i586-linux] [false, false, false] % ruby17 -v a.rb ruby 1.7.2 (2002-06-15) [i586-linux] [false, false, true] % string.cの1.66から1.67への変更と1.50.2.8から1.50.2.9への 変更を見比べるとこうしたかったのではないかと思うんですが。 Index: string.c =================================================================== RCS file: /src/ruby/string.c,v retrieving revision 1.105 diff -u -u -p -r1.105 string.c --- string.c 2002/06/04 07:34:15 1.105 +++ string.c 2002/06/17 02:11:34 @@ -2991,11 +2991,15 @@ rb_str_crypt(str, salt) VALUE str, salt; { extern char *crypt(); + VALUE result; StringValue(salt); if (RSTRING(salt)->len < 2) rb_raise(rb_eArgError, "salt too short(need >=2 bytes)"); - return rb_tainted_str_new2(crypt(RSTRING(str)->ptr, RSTRING(salt)->ptr)); + + result = rb_str_new2(crypt(RSTRING(str)->ptr, RSTRING(salt)->ptr)); + OBJ_INFECT(result, str); + return result; } static VALUE -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)