Ruby Forum Ruby-dev > [Bug #466] test_str_crypt(TestM17NComb) failed

Posted by Kazuhiro NISHIYAMA (Guest)
on 21.08.2008 13:21
(Received via mailing list)
Bug #466: test_str_crypt(TestM17NComb) failed
http://redmine.ruby-lang.org/issues/show/466

$B5/I<<T(B: Kazuhiro NISHIYAMA
$B%9%F!<%?%9(B: Open, $BM%@hEY(B: Normal

$ ruby-trunk -v
ruby 1.9.0 (2008-08-21 revision 18753) [powerpc-darwin9.4.0]
$B$N4D6-$G(Btest_str_crypt(TestM17NComb)$B$,(BFailure$B$K$J$j$^$9!#(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.

  1) 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"
$
$B$N$h$&$K(B2$B2sL\0J9_$G7k2L$,0c$&$N$,860x$N$h$&$G$9!#(B

$BD>@\(Bcrypt(2)$B$rF1$80z?t$G8F$s$G$bF1$87k2L$K$J$j$^$9!#(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
$
Posted by Yui NARUSE (Guest)
on 03.09.2008 12:02
(Received via mailing list)
$B%A%1%C%H(B #466 $B$,99?7$5$l$^$7$?!#(B (by Yui NARUSE)

$B%+%F%4%j(B core$B$K%;%C%H(B
$BC4Ev<T(B Yui NARUSE$B$+$i(BKazuhiro NISHIYAMA$B$KJQ99(B

M17N 
$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!"(B
$B$H$j$"$($:C4Ev$r@>;3$5$s$KMB$1$^$9!#(B
----------------------------------------
http://redmine.ruby-lang.org/issues/show/466
Posted by Kazuhiro NISHIYAMA (Guest)
on 07.09.2008 05:45
(Received via mailing list)
$B%A%1%C%H(B #466 $B$,99?7$5$l$^$7$?!#(B (by Kazuhiro NISHIYAMA)


$B0J2<$N$h$&$K(Bconfigure$B$G%A%'%C%/$7$F$7$^$&$N$,$$$$$+$H;W$C$?$N$G$9$,!"(B
$B$I$&$G$7$g$&$+(B?

$B1F6AHO0O$,$h$/$o$+$i$J$+$C$?$N$G!"<B:]$KCM$,JQ$o$C$F$7$^$&$3$H$,$"$C$?(B
darwin$B$N;~$@$1%A%'%C%/$9$k$h$&$J%Q%C%A$K$7$F$_$^$7$?!#(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)
         ])
+    ac_cv_lib_crypt_crypt=no
+                AC_CACHE_CHECK(for broken crypt with 8bit chars, 
rb_cv_broken_crypt,
+                    [AC_TRY_RUN([
+#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
Posted by Yukihiro Matsumoto (Guest)
on 07.09.2008 06:05
(Received via mailing list)
$B$^$D$b$H(B $B$f$-$R$m$G$9(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 
<redmine@ruby-lang.org> writes:

|$B0J2<$N$h$&$K(Bconfigure$B$G%A%'%C%/$7$F$7$^$&$N$,$$$$$+$H;W$C$?$N$G$9$,!"(B
|$B$I$&$G$7$g$&$+(B?
|
|$B1F6AHO0O$,$h$/$o$+$i$J$+$C$?$N$G!"<B:]$KCM$,JQ$o$C$F$7$^$&$3$H$,$"$C$?(B
|darwin$B$N;~$@$1%A%'%C%/$9$k$h$&$J%Q%C%A$K$7$F$_$^$7$?!#(B

$B%3%_%C%H$7$F$/$@$5$$$^$;$s$+!)(B
Posted by Anonymous (Guest)
on 07.09.2008 11:07
(Received via mailing list)
$B%A%1%C%H(B #466 $B$,99?7$5$l$^$7$?!#(B (by Anonymous)

$B%9%F!<%?%9(B Open$B$+$i(BClosed$B$KJQ99(B
$B?JD=(B % 0$B$+$i(B100$B$KJQ99(B

Applied in changeset r19213.
----------------------------------------
http://redmine.ruby-lang.org/issues/show/466
Posted by Nobuyoshi Nakada (nobu)
on 08.09.2008 03:53
(Received via mailing list)
$B$J$+$@$G$9!#(B

At Sun, 7 Sep 2008 12:39:11 +0900,
Kazuhiro NISHIYAMA wrote in [ruby-dev:36193]:
> $B0J2<$N$h$&$K(Bconfigure$B$G%A%'%C%/$7$F$7$^$&$N$,$$$$$+$H;W$C$?$N$G$9$,!"(B
> $B$I$&$G$7$g$&$+(B?
> 
> $B1F6AHO0O$,$h$/$o$+$i$J$+$C$?$N$G!"<B:]$KCM$,JQ$o$C$F$7$^$&$3$H$,$"$C$?(B
> darwin$B$N;~$@$1%A%'%C%/$9$k$h$&$J%Q%C%A$K$7$F$_$^$7$?!#(B

$B8=:_$N%i%$%V%i%j$G$O$?$^$?$^Kh2s7k2L$,JQ$o$C$F$$$^$9$,!"$D$M$K$=(B
$B$&$J$k$H$O8B$i$J$$$N$G$O$J$$$G$7$g$&$+!#Kh2sF1$8@5$7$/$J$$7k2L$r(B
$BJV$9$H$$$&2DG=@-$b$"$k$o$1$G!#(B

"$1"$B$d(B"$2"$B$G;O$^$k(Bsalt$B$G%"%k%4%j%:%`$rA*Br$9$k$H$$$&3HD%5!G=$N$"(B
$B$k%7%9%F%`$b$"$j$^$9$,!"(B8bit$BL\$r;H$C$?3HD%$H$$$&$N$O$J$$$H;W$o$l(B
$B$^$9!#(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;
+    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);
Posted by Kazuhiro NISHIYAMA (Guest)
on 08.09.2008 12:31
(Received via mailing list)
$B@>;3OB9-$G$9!#(B

At Mon, 8 Sep 2008 10:46:45 +0900,
Nobuyoshi Nakada wrote:
> 
> $B8=:_$N%i%$%V%i%j$G$O$?$^$?$^Kh2s7k2L$,JQ$o$C$F$$$^$9$,!"$D$M$K$=(B
> $B$&$J$k$H$O8B$i$J$$$N$G$O$J$$$G$7$g$&$+!#Kh2sF1$8@5$7$/$J$$7k2L$r(B
> $BJV$9$H$$$&2DG=@-$b$"$k$o$1$G!#(B

$BKh2sF1$8@5$7$/$J$$7k2L$,JV$C$F$/$k$J$i!"$=$l$O$=$l$GLdBj$,(B
$B$*$-$J$5$=$&$J5$$,$7$^$9$,!#(B


> "$1"$B$d(B"$2"$B$G;O$^$k(Bsalt$B$G%"%k%4%j%:%`$rA*Br$9$k$H$$$&3HD%5!G=$N$"(B
> $B$k%7%9%F%`$b$"$j$^$9$,!"(B8bit$BL\$r;H$C$?3HD%$H$$$&$N$O$J$$$H;W$o$l(B
> $B$^$9!#(B

8$B%S%C%HL\$r%/%j%"$7$?7k2L$,$?$^$?$^(B"$1"$B$d(B"$2"$B$K$J$C$F$$$?$H$-$N(B
$B$3$H$r9M$($F$$$J$+$C$?$N$G$9$,!"5$$K$7$J$/$F$b$$$$$N$G$7$g$&$+(B?


> +    result = rb_str_new2(crypt(s, salts));

$B$3$N(Bsalts$B$r(Bsaltp$B$KJQ99$7$F!"%F%9%H$,DL$k$3$H$r3NG'$7$^$7$?!#(B
Posted by Nobuyoshi Nakada (nobu)
on 08.09.2008 19:13
(Received via mailing list)
$B$J$+$@$G$9!#(B

At Mon, 8 Sep 2008 19:23:47 +0900,
Kazuhiro NISHIYAMA wrote in [ruby-dev:36213]:
> > $B8=:_$N%i%$%V%i%j$G$O$?$^$?$^Kh2s7k2L$,JQ$o$C$F$$$^$9$,!"$D$M$K$=(B
> > $B$&$J$k$H$O8B$i$J$$$N$G$O$J$$$G$7$g$&$+!#Kh2sF1$8@5$7$/$J$$7k2L$r(B
> > $BJV$9$H$$$&2DG=@-$b$"$k$o$1$G!#(B
> 
> $BKh2sF1$8@5$7$/$J$$7k2L$,JV$C$F$/$k$J$i!"$=$l$O$=$l$GLdBj$,(B
> $B$*$-$J$5$=$&$J5$$,$7$^$9$,!#(B

$BLdBj$,$"$j$=$&$J$N$O!"B>$N%7%9%F%`$G0E9f2=$5$l$?$b$N$r$b$C$F$-$?(B
$B>l9g$G$7$g$&$M!#(B

> > "$1"$B$d(B"$2"$B$G;O$^$k(Bsalt$B$G%"%k%4%j%:%`$rA*Br$9$k$H$$$&3HD%5!G=$N$"(B
> > $B$k%7%9%F%`$b$"$j$^$9$,!"(B8bit$BL\$r;H$C$?3HD%$H$$$&$N$O$J$$$H;W$o$l(B
> > $B$^$9!#(B
> 
> 8$B%S%C%HL\$r%/%j%"$7$?7k2L$,$?$^$?$^(B"$1"$B$d(B"$2"$B$K$J$C$F$$$?$H$-$N(B
> $B$3$H$r9M$($F$$$J$+$C$?$N$G$9$,!"5$$K$7$J$/$F$b$$$$$N$G$7$g$&$+(B?

crypt(3)$B$K$h$k$H(Bsalt$B$H$7$FM-8z$J$N$O(B[A-Za-z0-9./]$B$H$$$&$3$H$@$C(B
$B$?$N$GL5;k$5$l$k$+$H;W$C$?$N$G$9$,!"(Bglibc$B$N(Bcrypt()$B$G$O(B
"\xc1\xc1"$B$H(B"\x41\x41"$B$G$b0[$J$k7k2L$rJV$9$N$G!"C1$K%^%9%/$7$F$7(B
$B$^$&$N$bLdBj$,$"$j$=$&$G$9!#(B