In message "[ruby-talk:03667] Ruby 1.4.5 bug"
    on 00/06/26, Feng Hou <fenghou / erols.com> writes:
|
|    Compiled ruby 1.4.5 source on Redhat Linux (intel).  Got
|segmentation fault when executing ruby-1.4.5/sample/dualstack-httpd.rb.
|
|        [jfhou@localhost sample]$ ruby -v dualstack-httpd.rb
|        ruby 1.4.5 (2000-06-24) [i586-linux]
|        dualstack-httpd.rb:16: [BUG] Segmentation fault
|        Aborted (core dumped)

Katsuyuki Komatsu <komatsu / sarion.co.jp> found and fixed the bug
yesterday.  Here's the patch.

diff -ru1p ruby-1.4.5.dist/ext/socket/socket.c ruby-1.4.5/ext/socket/socket.c
--- ruby-1.4.5.dist/ext/socket/socket.c	Wed May 31 17:10:04 2000
+++ ruby-1.4.5/ext/socket/socket.c	Sun Jun 25 00:55:03 2000
@@ -1960,15 +1960,17 @@ sock_s_getnameinfo(argc, argv)
     if (error) goto error_exit;
-    for (r = res->ai_next; r; r = r->ai_next) {
-	char hbuf2[1024], pbuf2[1024];
+    if (res) {
+	for (r = res->ai_next; r; r = r->ai_next) {
+	    char hbuf2[1024], pbuf2[1024];
 
-	sap = r->ai_addr;
-	error = getnameinfo(sap, SA_LEN(sap), hbuf2, sizeof(hbuf2),
-			    pbuf2, sizeof(pbuf2), fl);
-	if (error) goto error_exit;
-	if (strcmp(hbuf, hbuf2) != 0|| strcmp(pbuf, pbuf2) != 0) {
-	    freeaddrinfo(res);
-	    rb_raise(rb_eSocket, "sockaddr resolved to multiple nodename");
+	    sap = r->ai_addr;
+	    error = getnameinfo(sap, SA_LEN(sap), hbuf2, sizeof(hbuf2),
+				pbuf2, sizeof(pbuf2), fl);
+	    if (error) goto error_exit;
+	    if (strcmp(hbuf, hbuf2) != 0|| strcmp(pbuf, pbuf2) != 0) {
+		freeaddrinfo(res);
+		rb_raise(rb_eSocket, "sockaddr resolved to multiple nodename");
+	    }
 	}
+	freeaddrinfo(res);
     }
-    freeaddrinfo(res);
     return rb_assoc_new(rb_tainted_str_new2(hbuf), rb_tainted_str_new2(pbuf));