Change 19836 by [EMAIL PROTECTED] on 2003/06/22 15:55:13
Debian fix from Brendan O'Dea:
Bug#156284: the stucture used by pp_accept is too small to hold an
IPv6 address.
Affected files ...
... //depot/perl/pp_sys.c#345 edit
Differences ...
==== //depot/perl/pp_sys.c#345 (text) ====
Index: perl/pp_sys.c
--- perl/pp_sys.c#344~19793~ Sun Jun 15 12:47:21 2003
+++ perl/pp_sys.c Sun Jun 22 08:55:13 2003
@@ -2479,8 +2479,12 @@
GV *ggv;
register IO *nstio;
register IO *gstio;
- struct sockaddr saddr; /* use a struct to avoid alignment problems */
- Sock_size_t len = sizeof saddr;
+ char namebuf[MAXPATHLEN];
+#if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(MPE) ||
defined(__QNXNTO__)
+ Sock_size_t len = sizeof (struct sockaddr_in);
+#else
+ Sock_size_t len = sizeof namebuf;
+#endif
int fd;
ggv = (GV*)POPs;
@@ -2496,7 +2500,7 @@
goto nuts;
nstio = GvIOn(ngv);
- fd = PerlSock_accept(PerlIO_fileno(IoIFP(gstio)), (struct sockaddr *)&saddr,
&len);
+ fd = PerlSock_accept(PerlIO_fileno(IoIFP(gstio)), (struct sockaddr *) namebuf,
&len);
if (fd < 0)
goto badexit;
if (IoIFP(nstio))
@@ -2515,14 +2519,14 @@
#endif
#ifdef EPOC
- len = sizeof saddr; /* EPOC somehow truncates info */
+ len = sizeof (struct sockaddr_in); /* EPOC somehow truncates info */
setbuf( IoIFP(nstio), NULL); /* EPOC gets confused about sockets */
#endif
#ifdef __SCO_VERSION__
- len = sizeof saddr; /* OpenUNIX 8 somehow truncates info */
+ len = sizeof (struct sockaddr_in); /* OpenUNIX 8 somehow truncates info */
#endif
- PUSHp((char *)&saddr, len);
+ PUSHp(namebuf, len);
RETURN;
nuts:
End of Patch.