# \[Bug #466\] test\_str\_crypt(TestM17NComb) failed

**URL:** <https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469>\
**Category:** Development\
**Created:** [August 21, 2008, 1:21pm UTC](https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469 "2008-08-21T13:21:44Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [August 21, 2008, 1:21pm UTC](https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469/1 "2008-08-21T13:21:44Z")

</div>

Bug #466: test\_str\_crypt(TestM17NComb) failed  
[http://redmine.ruby-lang.org/issues/show/466](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.

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”  
$  
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  
$

---

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [September 3, 2008, 12:02pm UTC](https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469/2 "2008-09-03T12:02:05Z")

</div>

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](http://redmine.ruby-lang.org/issues/show/466)

---

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [September 7, 2008, 5:45am UTC](https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469/3 "2008-09-07T05:45:47Z")

</div>

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)  
])

- 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

- 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](http://redmine.ruby-lang.org/issues/show/466)

---

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [September 7, 2008, 11:07am UTC](https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469/4 "2008-09-07T11:07:26Z")

</div>

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](http://redmine.ruby-lang.org/issues/show/466)

---

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [September 7, 2008, 6:05am UTC](https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469/5 "2008-09-07T06:05:39Z")

</div>

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  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [September 8, 2008, 3:53am UTC](https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469/6 "2008-09-08T03:53:47Z")

</div>

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;

- 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);

---

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [September 8, 2008, 7:13pm UTC](https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469/7 "2008-09-08T19:13:58Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [September 8, 2008, 12:31pm UTC](https://www.ruby-forum.com/t/bug-466-test-str-crypt-testm17ncomb-failed/146469/8 "2008-09-08T12:31:38Z")

</div>

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
