Bug #466: test_str_crypt(TestM17NComb) failed
http://redmine.ruby-lang.org/issues/show/466
e$B5/I<<Te(B: Kazuhiro NISHIYAMA
e$B%9%F!<%?%9e(B: Open, e$BM%@hEYe(B: Normal
$ ruby-trunk -v
ruby 1.9.0 (2008-08-21 revision 18753) [powerpc-darwin9.4.0]
e$B$N4D6-$Ge(Btest_str_crypt(TestM17NComb)e$B$,e(BFailuree$B$K$J$j$^$9!#e(B
$ ruby-trunk test/ruby/test_m17n_comb.rb -v -n /crypt/
Loaded suite test/ruby/test_m17n_comb
Started
test_str_crypt(TestM17NComb): F
Finished in 0.03673 seconds.
- Failure:
test_str_crypt(TestM17NComb)
[test/ruby/test_m17n_comb.rb:800:in block in test_str_crypt' /Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:83:in
block in each’
/Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:75:in
block in each_index' /Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:46:in
block in make_large_block’
/Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:26:in
block (2 levels) in make_basic_block' /Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:21:in
times’
/Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:21:in
block in make_basic_block' /Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:20:in
times’
/Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:20:in
make_basic_block' /Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:45:in
make_large_block’
/Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:71:in
each_index' /Users/nishiyamakazuhiro/wc/ruby-lang/trunk/test/ruby/allpairs.rb:82:in
each’
test/ruby/test_m17n_comb.rb:118:in combination' test/ruby/test_m17n_comb.rb:794:in
test_str_crypt’]:
“”.force_encoding(“ASCII-8BIT”).crypt(“\xE0\xA0\xA1”.force_encoding(“UTF-8”)).
<“\xE0\xA0fT7zdRv9Y7A”> expected but was
<“\xE0\xA0swiH3o6yAu2”>.
1 tests, 55 assertions, 1 failures, 0 errors
$
$ ruby-trunk -ve ‘3.times{p “”.crypt(“\xE0\xA0”)}’
ruby 1.9.0 (2008-08-21 revision 18753) [powerpc-darwin9.4.0]
“\xE0\xA0X8NBuQ4l6uQ”
“\xE0\xA0fT7zdRv9Y7A”
“\xE0\xA0fT7zdRv9Y7A”
$
e$B$N$h$&$Ke(B2e$B2sL\0J9_$G7k2L$,0c$&$N$,860x$N$h$&$G$9!#e(B
e$BD>@\e(Bcrypt(2)e$B$rF1$80z?t$G8F$s$G$bF1$87k2L$K$J$j$^$9!#e(B
$ cat a.c
#include <stdio.h>
#include <unistd.h>
int main()
{
printf(“%s\n”, crypt(“”, “\xE0\xA0”));
printf(“%s\n”, crypt(“”, “\xE0\xA0”));
printf(“%s\n”, crypt(“”, “\xE0\xA0”));
return 0;
}
$ gcc a.c
$ ./a.out |LANG=C cat -v
M-M- X8NBuQ4l6uQ M-
M- fT7zdRv9Y7A
M-`M- fT7zdRv9Y7A
$
e$B%A%1%C%He(B #466 e$B$,99?7$5$l$^$7$?!#e(B (by Yui NARUSE)
e$B%+%F%4%je(B coree$B$K%;%C%He(B
e$BC4Ev<Te(B Yui NARUSEe$B$+$ie(BKazuhiro NISHIYAMAe$B$KJQ99e(B
M17N
e$B$G$J$/%i%$%V%i%jB&$NLdBj$H$$$&$N$H!"BEEv$J2r7h:v$NH=CG$,$o$?$7$K$O$D$1$i$l$J$$$N$G!“e(B
e$B$H$j$”$($:C4Ev$r@>;3$5$s$KMB$1$^$9!#e(B
http://redmine.ruby-lang.org/issues/show/466
e$B%A%1%C%He(B #466 e$B$,99?7$5$l$^$7$?!#e(B (by Kazuhiro NISHIYAMA)
e$B0J2<$N$h$&$Ke(Bconfiguree$B$G%A%'%C%/$7$F$7$^$&$N$,$$$$$+$H;W$C$?$N$G$9$,!"e(B
e$B$I$&$G$7$g$&$+e(B?
e$B1F6AHO0O$,$h$/$o$+$i$J$+$C$?$N$G!“<B:]$KCM$,JQ$o$C$F$7$^$&$3$H$,$”$C$?e(B
darwine$B$N;~$@$1%A%'%C%/$9$k$h$&$J%Q%C%A$K$7$F$_$^$7$?!#e(B
Index: configure.in
— configure.in (revision 19208)
+++ configure.in (working copy)
@@ -523,6 +523,26 @@
AC_DEFINE(BROKEN_SETREUID, 1)
AC_DEFINE(BROKEN_SETREGID, 1)
])
rb_cv_broken_crypt,
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+int
+main()
+{
-
char buf[256];
-
strcpy(buf, crypt(“”, “\xE0\xA0”));
-
return strcmp(buf, crypt(“”, “\xE0\xA0”));
+}
+],
-
rb_cv_broken_crypt=no,
-
rb_cv_broken_crypt=yes,
-
rb_cv_broken_crypt=yes)])
-
if test "$rb_cv_broken_crypt" = yes; then
-
AC_DEFINE(BROKEN_CRYPT, 1)
-
fi
;;
hpux*) LIBS=“-lm $LIBS”
ac_cv_c_inline=no;;
Index: string.c
===================================================================
— string.c (revision 19208)
+++ string.c (working copy)
@@ -5862,6 +5862,10 @@
extern char *crypt(const char *, const char *);
VALUE result;
const char *s;
+#ifdef BROKEN_CRYPT
-
VALUE salt_8bit_clean;
-
rb_encoding *enc;
+#endif
StringValue(salt);
if (RSTRING_LEN(salt) < 2)
@@ -5869,7 +5873,18 @@
if (RSTRING_PTR(str)) s = RSTRING_PTR(str);
else s = “”;
+#ifdef BROKEN_CRYPT
-
salt_8bit_clean = rb_str_dup(salt);
-
enc = rb_ascii8bit_encoding();
-
str_modifiable(salt_8bit_clean);
-
rb_enc_associate(salt_8bit_clean, enc);
-
salt_8bit_clean = rb_str_tr(salt_8bit_clean,
-
rb_enc_str_new("\x80-\xFF", 3, enc),
-
rb_usascii_str_new("\x00-\x7F", 3));
-
result = rb_str_new2(crypt(s, RSTRING_PTR(salt_8bit_clean)));
+#else
result = rb_str_new2(crypt(s, RSTRING_PTR(salt)));
+#endif
OBJ_INFECT(result, str);
OBJ_INFECT(result, salt);
return result;
http://redmine.ruby-lang.org/issues/show/466
e$B%A%1%C%He(B #466 e$B$,99?7$5$l$^$7$?!#e(B (by Anonymous)
e$B%9%F!<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B
Applied in changeset r19213.
http://redmine.ruby-lang.org/issues/show/466
e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B
In message “Re: [ruby-dev:36193] [Bug #466] test_str_crypt(TestM17NComb)
failed”
on Sun, 7 Sep 2008 12:39:11 +0900, Kazuhiro NISHIYAMA
[email protected] writes:
|e$B0J2<$N$h$&$Ke(Bconfiguree$B$G%A%‘%C%/$7$F$7$^$&$N$,$$$$$+$H;W$C$?$N$G$9$,!“e(B
|e$B$I$&$G$7$g$&$+e(B?
|
|e$B1F6AHO0O$,$h$/$o$+$i$J$+$C$?$N$G!”<B:]$KCM$,JQ$o$C$F$7$^$&$3$H$,$"$C$?e(B
|darwine$B$N;~$@$1%A%’%C%/$9$k$h$&$J%Q%C%A$K$7$F$_$^$7$?!#e(B
e$B%3%_%C%H$7$F$/$@$5$$$^$;$s$+!)e(B
e$B$J$+$@$G$9!#e(B
At Sun, 7 Sep 2008 12:39:11 +0900,
Kazuhiro NISHIYAMA wrote in [ruby-dev:36193]:
e$B0J2<$N$h$&$Ke(Bconfiguree$B$G%A%’%C%/$7$F$7$^$&$N$,$$$$$+$H;W$C$?$N$G$9$,!"e(B
e$B$I$&$G$7$g$&$+e(B?
e$B1F6AHO0O$,$h$/$o$+$i$J$+$C$?$N$G!"<B:]$KCM$,JQ$o$C$F$7$^$&$3$H$,$"$C$?e(B
darwine$B$N;~$@$1%A%’%C%/$9$k$h$&$J%Q%C%A$K$7$F$_$^$7$?!#e(B
e$B8=:_$N%i%$%V%i%j$G$O$?$^$?$^Kh2s7k2L$,JQ$o$C$F$$$^$9$,!"$D$M$K$=e(B
e$B$&$J$k$H$O8B$i$J$$$N$G$O$J$$$G$7$g$&$+!#Kh2sF1$8@5$7$/$J$$7k2L$re(B
e$BJV$9$H$$$&2DG=@-$b$"$k$o$1$G!#e(B
“$1"e$B$de(B”$2"e$B$G;O$^$ke(Bsalte$B$G%"%k%4%j%:%$rA*Br$9$k$H$$$&3HD%5!G=$N$"e(B e$B$k%7%9%F%
$b$"$j$^$9$,!"e(B8bite$BL$r;H$C$?3HD%$H$$$&$N$O$J$$$H;W$o$le(B
e$B$^$9!#e(B
Index: string.c
— string.c (revision 19215)
+++ string.c (working copy)
@@ -5862,8 +5862,7 @@ rb_str_crypt(VALUE str, VALUE salt)
extern char *crypt(const char *, const char *);
VALUE result;
- const char *s, *saltp;
#ifdef BROKEN_CRYPT
- VALUE salt_8bit_clean;
- rb_encoding *enc;
- char salt_8bit_clean[3];
#endif
@@ -5872,18 +5871,14 @@ rb_str_crypt(VALUE str, VALUE salt)
rb_raise(rb_eArgError, “salt too short (need >=2 bytes)”);
- if (RSTRING_PTR(str)) s = RSTRING_PTR(str);
- else s = “”;
-#ifdef BROKEN_CRYPT
- salt_8bit_clean = rb_str_dup(salt);
- enc = rb_ascii8bit_encoding();
- str_modifiable(salt_8bit_clean);
- rb_enc_associate(salt_8bit_clean, enc);
- salt_8bit_clean = rb_str_tr(salt_8bit_clean,
-
rb_enc_str_new("\x80-\xFF", 3, enc),
-
rb_usascii_str_new("\x00-\x7F", 3));
- result = rb_str_new2(crypt(s, RSTRING_PTR(salt_8bit_clean)));
-#else
- result = rb_str_new2(crypt(s, RSTRING_PTR(salt)));
-#endif
- s = RSTRING_PTR(str);
- if (!s) s = “”;
- saltp = RSTRING_PTR(salt);
- if (!ISASCII((unsigned char)saltp[0]) || !ISASCII((unsigned
char)saltp[1])) {
- salt_8bit_clean[0] = saltp[0] & 0x7f;
- salt_8bit_clean[1] = saltp[2] & 0x7f;
- salt_8bit_clean[2] = ‘\0’;
- saltp = salt_8bit_clean;
- }
- result = rb_str_new2(crypt(s, salts));
OBJ_INFECT(result, str);
OBJ_INFECT(result, salt);
e$B$J$+$@$G$9!#e(B
At Mon, 8 Sep 2008 19:23:47 +0900,
Kazuhiro NISHIYAMA wrote in [ruby-dev:36213]:
e$B8=:_$N%i%$%V%i%j$G$O$?$^$?$^Kh2s7k2L$,JQ$o$C$F$$$^$9$,!"$D$M$K$=e(B
e$B$&$J$k$H$O8B$i$J$$$N$G$O$J$$$G$7$g$&$+!#Kh2sF1$8@5$7$/$J$$7k2L$re(B
e$BJV$9$H$$$&2DG=@-$b$"$k$o$1$G!#e(B
e$BKh2sF1$8@5$7$/$J$$7k2L$,JV$C$F$/$k$J$i!"$=$l$O$=$l$GLdBj$,e(B
e$B$*$-$J$5$=$&$J5$$,$7$^$9$,!#e(B
e$BLdBj$,$"$j$=$&$J$N$O!"B>$N%7%9%F%`$G0E9f2=$5$l$?$b$N$r$b$C$F$-$?e(B
e$B>l9g$G$7$g$&$M!#e(B
“$1"e$B$de(B”$2"e$B$G;O$^$ke(Bsalte$B$G%"%k%4%j%:%$rA*Br$9$k$H$$$&3HD%5!G=$N$"e(B e$B$k%7%9%F%
$b$"$j$^$9$,!"e(B8bite$BL$r;H$C$?3HD%$H$$$&$N$O$J$$$H;W$o$le(B
e$B$^$9!#e(B
8e$B%S%C%HL$r%/%j%"$7$?7k2L$,$?$^$?$^e(B"$1"e$B$de(B"$2"e$B$K$J$C$F$$$?$H$-$Ne(B
e$B$3$H$r9M$($F$$$J$+$C$?$N$G$9$,!"5$$K$7$J$/$F$b$$$$$N$G$7$g$&$+e(B?
crypt(3)e$B$K$h$k$He(Bsalte$B$H$7$FM-8z$J$N$Oe(B[A-Za-z0-9./]e$B$H$$$&$3$H$@$Ce(B
e$B$?$N$GL5;k$5$l$k$+$H;W$C$?$N$G$9$,!"e(Bglibce$B$Ne(Bcrypt()e$B$G$Oe(B
“\xc1\xc1"e$B$He(B”\x41\x41"e$B$G$b0[$J$k7k2L$rJV$9$N$G!“C1$K%^%9%/$7$F$7e(B
e$B$^$&$N$bLdBj$,$”$j$=$&$G$9!#e(B
e$B@>;3OB9-$G$9!#e(B
At Mon, 8 Sep 2008 10:46:45 +0900,
Nobuyoshi N. wrote:
e$B8=:_$N%i%$%V%i%j$G$O$?$^$?$^Kh2s7k2L$,JQ$o$C$F$$$^$9$,!"$D$M$K$=e(B
e$B$&$J$k$H$O8B$i$J$$$N$G$O$J$$$G$7$g$&$+!#Kh2sF1$8@5$7$/$J$$7k2L$re(B
e$BJV$9$H$$$&2DG=@-$b$"$k$o$1$G!#e(B
e$BKh2sF1$8@5$7$/$J$$7k2L$,JV$C$F$/$k$J$i!"$=$l$O$=$l$GLdBj$,e(B
e$B$*$-$J$5$=$&$J5$$,$7$^$9$,!#e(B
“$1"e$B$de(B”$2"e$B$G;O$^$ke(Bsalte$B$G%"%k%4%j%:%$rA*Br$9$k$H$$$&3HD%5!G=$N$"e(B e$B$k%7%9%F%
$b$"$j$^$9$,!"e(B8bite$BL$r;H$C$?3HD%$H$$$&$N$O$J$$$H;W$o$le(B
e$B$^$9!#e(B
8e$B%S%C%HL$r%/%j%"$7$?7k2L$,$?$^$?$^e(B"$1"e$B$de(B"$2"e$B$K$J$C$F$$$?$H$-$Ne(B
e$B$3$H$r9M$($F$$$J$+$C$?$N$G$9$,!"5$$K$7$J$/$F$b$$$$$N$G$7$g$&$+e(B?
- result = rb_str_new2(crypt(s, salts));
e$B$3$Ne(Bsaltse$B$re(Bsaltpe$B$KJQ99$7$F!"%F%9%H$,DL$k$3$H$r3NG’$7$^$7$?!#e(B