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