unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* Fix `inet-ntop' bus error on SPARC
@ 2007-06-12 22:09 Ludovic Courtès
  0 siblings, 0 replies; only message in thread
From: Ludovic Courtès @ 2007-06-12 22:09 UTC (permalink / raw)
  To: guile-devel

[-- Attachment #1: Type: text/plain, Size: 148 bytes --]

Hi,

FYI, I committed the patch below to both branches.  It fixes a bus error
(unaligned access) on SPARC in the `AF_INET' case.

Thanks,
Ludovic.


[-- Attachment #2: `inet-ntop' fix --]
[-- Type: text/x-patch, Size: 3423 bytes --]

--- orig/libguile/ChangeLog
+++ mod/libguile/ChangeLog
@@ -1,3 +1,9 @@
+2007-06-12  Ludovic Courtès  <ludo@chbouib.org>
+
+	* socket.c (scm_inet_ntop): In the `AF_INET' case, declare `addr4'
+	as an `scm_t_uint32' rather than re-using `addr6'.  This fixes a
+	bus error on SPARC (and possibly others) due to unaligned access.
+
 2007-06-07  Ludovic Courtès  <ludovic.courtes@laas.fr>
 
 	* posix.c (scm_ttyname): Check whether RESULT is NULL before
--- orig/libguile/socket.c
+++ mod/libguile/socket.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996,1997,1998,2000,2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996,1997,1998,2000,2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -386,16 +386,28 @@ SCM_DEFINE (scm_inet_ntop, "inet-ntop", 
 #else
   char dst[46];
 #endif
-  char addr6[16];
+  const char *result;
 
   af = scm_to_int (family);
   SCM_ASSERT_RANGE (1, family, af == AF_INET || af == AF_INET6);
   if (af == AF_INET)
-    *(scm_t_uint32 *) addr6 = htonl (SCM_NUM2ULONG (2, address));
+    {
+      scm_t_uint32 addr4;
+
+      addr4 = htonl (SCM_NUM2ULONG (2, address));
+      result = inet_ntop (af, &addr4, dst, sizeof (dst));
+    }
   else
-    scm_to_ipv6 ((scm_t_uint8 *) addr6, address);
-  if (inet_ntop (af, &addr6, dst, sizeof dst) == NULL)
+    {
+      char addr6[16];
+
+      scm_to_ipv6 ((scm_t_uint8 *) addr6, address);
+      result = inet_ntop (af, &addr6, dst, sizeof (dst));
+    }
+
+  if (result == NULL)
     SCM_SYSERROR;
+
   return scm_from_locale_string (dst);
 }
 #undef FUNC_NAME
--- orig/test-suite/ChangeLog
+++ mod/test-suite/ChangeLog
@@ -1,3 +1,8 @@
+2007-06-12  Ludovic Courtès  <ludo@chbouib.org>
+
+	* tests/socket.test: Renamed module to `(test-suite test-socket)'.
+	(inet-ntop): New test prefix.
+
 2007-06-07  Ludovic Courtès  <ludovic.courtes@laas.fr>
 
 	* lib.scm (exception:system-error): New variable.
--- orig/test-suite/tests/socket.test
+++ mod/test-suite/tests/socket.test
@@ -1,6 +1,6 @@
 ;;;; socket.test --- test socket functions     -*- scheme -*-
 ;;;;
-;;;; Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+;;;; Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 ;;;;
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
@@ -16,7 +16,7 @@
 ;;;; License along with this library; if not, write to the Free Software
 ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
-(define-module (test-suite test-numbers)
+(define-module (test-suite test-socket)
   #:use-module (test-suite lib))
 
 \f
@@ -101,6 +101,22 @@
 		(inet-pton AF_INET6
 			   "0000:0000:0000:0000:0000:0000:0000:00F0"))))))
 
+(if (defined? 'inet-ntop)
+    (with-test-prefix "inet-ntop"
+
+      (with-test-prefix "ipv4"
+	(pass-if "127.0.0.1"
+	  (equal? "127.0.0.1" (inet-ntop AF_INET INADDR_LOOPBACK))))
+
+      (if (defined? 'AF_INET6)
+	  (with-test-prefix "ipv6"
+	    (pass-if "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"
+	      (string-ci=? "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"
+			   (inet-ntop AF_INET6 (- (expt 2 128) 1))))
+
+	    (pass-if "::1"
+	      (equal? "::1" (inet-ntop AF_INET6 1)))))))
+
 \f
 ;;;
 ;;; make-socket-address


[-- Attachment #3: Type: text/plain, Size: 143 bytes --]

_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-06-12 22:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-12 22:09 Fix `inet-ntop' bus error on SPARC Ludovic Courtès

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).