[#6728] Ruby 1.3.3-990507 — matz <matz@...>

Ruby 1.3.3-990507 is out, check out:

34 messages 1999/05/07
[#6731] Re: Ruby 1.3.3-990507 — Katsuyuki Komatsu <komatsu@...> 1999/05/07

小松です。

[#6779] Re: private inner class (Re: Re: class def in class def) — Koji Oda <oda@...1.qnes.nec.co.jp>

小田@QNES です。

13 messages 1999/05/13

[#6789] Ruby 1.3.3-990513 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.3-990513 is out, check out:

59 messages 1999/05/13
[#6811] Re: Ruby 1.3.3-990513 — Koji Oda <oda@...1.qnes.nec.co.jp> 1999/05/14

小田@QNES です。

[#6814] Re: Ruby 1.3.3-990513 — matz@... (Yukihiro Matsumoto) 1999/05/15

まつもと ゆきひろです

[#6821] Re: Ruby 1.3.3-990513 — Koji Oda <oda@...1.qnes.nec.co.jp> 1999/05/16

小田@QNES です。

[#6790] Re: Ruby 1.3.3-990513 — Katsuyuki Komatsu <komatsu@...> 1999/05/13

小松です。

[#6891] Ruby 1.3.3-990518 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.3-990518 is out, check out:

19 messages 1999/05/18

[#6919] ext/socket/getaddrinfo.c tiny fix — Jun-ichiro itojun Hagino <itojun@...>

ext/socket/getaddrinfo.cに以下のpatchをおねがいします。

22 messages 1999/05/20
[#6921] Re: ext/socket/getaddrinfo.c tiny fix — Jun-ichiro itojun Hagino <itojun@...> 1999/05/20

[#7034] Ruby 1.3.4-990531 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990531 is out, check out:

25 messages 1999/05/31

[ruby-dev:7037] Re: Ruby 1.3.4-990531

From: Koji Arai <JCA02266@...>
Date: 1999-05-31 17:49:43 UTC
List: ruby-dev #7037
新井です。

ruby-1.2.5も同様ですが、

p [""].pack("H1000")
p [""].pack("h1000")
p [""].pack("B1000")
p [""].pack("b1000")

がゴミを返します。

添付の(不完全な)パッチで、

""
""
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000..."
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000..."

となりますが、H/h と B/b の挙動どちらがいいのでしょ
う?

最初にバグを発見した自前のスクリプトでは、前者を期
待した処理でしたが…

perlは、後者のようです。

perl -le 'print pack("B32", "")' | cat -v
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

Index: pack.c
===================================================================
RCS file: /home/cvs/ruby/pack.c,v
retrieving revision 1.1.1.3.2.7
diff -u -r1.1.1.3.2.7 pack.c
--- pack.c	1999/05/25 08:26:01	1.1.1.3.2.7
+++ pack.c	1999/05/31 17:28:51
@@ -368,16 +368,19 @@
 		    int byte = 0;
 		    int i;
 
-		    for (i=0; i++ < len; ptr++) {
+		    for (i=0; i < len; i++) {
 			if (*ptr & 1)
 			    byte |= 128;
-			if (i & 7)
+			if (i+1 & 7)
 			    byte >>= 1;
 			else {
 			    char c = byte & 0xff;
 			    rb_str_cat(res, &c, 1);
 			    byte = 0;
 			}
+
+			if (i < plen)
+			    ptr++;
 		    }
 		    if (len & 7) {
 			char c;
@@ -393,15 +396,17 @@
 		    int byte = 0;
 		    int i;
 
-		    for (i=0; i++ < len; ptr++) {
+		    for (i=0; i < len; i++) {
 			byte |= *ptr & 1;
-			if (i & 7)
+			if (i+1 & 7)
 			    byte <<= 1;
 			else {
 			    char c = byte & 0xff;
 			    rb_str_cat(res, &c, 1);
 			    byte = 0;
 			}
+			if (i < plen)
+			    ptr++;
 		    }
 		    if (len & 7) {
 			char c;
@@ -417,13 +422,13 @@
 		    int byte = 0;
 		    int i;
 
-		    for (i=0; i++ < len; ptr++) {
+		    for (i=0; i < len; i++) {
 			if (ISXDIGIT(*ptr)) {
 			    if (ISALPHA(*ptr))
 				byte |= (((*ptr & 15) + 9) & 15) << 4;
 			    else
 				byte |= (*ptr & 15) << 4;
-			    if (i & 1)
+			    if (i+1 & 1)
 				byte >>= 4;
 			    else {
 				char c = byte & 0xff;
@@ -431,6 +436,9 @@
 				byte = 0;
 			    }
 			}
+
+			if (i < plen)
+			    ptr++;
 		    }
 		    if (len & 1) {
 			char c = byte & 0xff;
@@ -444,13 +452,13 @@
 		    int byte = 0;
 		    int i;
 
-		    for (i=0; i++ < len; ptr++) {
+		    for (i=0; i < len; i++) {
 			if (ISXDIGIT(*ptr)) {
 			    if (ISALPHA(*ptr))
 				byte |= ((*ptr & 15) + 9) & 15;
 			    else
 				byte |= *ptr & 15;
-			    if (i & 1)
+			    if (i+1 & 1)
 				byte <<= 4;
 			    else {
 				char c = byte & 0xff;
@@ -458,6 +466,9 @@
 				byte = 0;
 			    }
 			}
+
+			if (i < plen)
+			    ptr++;
 		    }
 		    if (len & 1) {
 			char c = byte & 0xff;

In This Thread