From f1fabc56fb9cd2417f5423fdc73ab73574ea8c8e Mon Sep 17 00:00:00 2001 From: Samuel Tyler Date: Fri, 22 Aug 2025 23:58:47 +1000 Subject: [PATCH 1/4] Revert "Upgrade Socket from 2.004 to 2.006" This reverts commit aff163d96ea1505927d05ead3078b1d7bb3bfa93. --- Porting/Maintainers.pl | 2 +- cpan/Socket/Makefile.PL | 8 +----- cpan/Socket/Socket.pm | 6 +--- cpan/Socket/Socket.xs | 59 ++++++++++++---------------------------- cpan/Socket/t/sockaddr.t | 10 ++----- pod/perldelta.pod | 5 +--- 6 files changed, 25 insertions(+), 65 deletions(-) diff --git perl-5.17.4/Porting/Maintainers.pl perl-5.17.4/Porting/Maintainers.pl index e107f710e0..54ab2c1352 100755 --- perl-5.17.4/Porting/Maintainers.pl +++ perl-5.17.4/Porting/Maintainers.pl @@ -1636,7 +1636,7 @@ use File::Glob qw(:case); 'Socket' => { 'MAINTAINER' => 'pevans', - 'DISTRIBUTION' => 'PEVANS/Socket-2.006.tar.gz', + 'DISTRIBUTION' => 'PEVANS/Socket-2.004.tar.gz', 'FILES' => q[cpan/Socket], 'UPSTREAM' => 'cpan', }, diff --git perl-5.17.4/cpan/Socket/Makefile.PL perl-5.17.4/cpan/Socket/Makefile.PL index 639a57c4d6..9e76dcea96 100644 --- perl-5.17.4/cpan/Socket/Makefile.PL +++ perl-5.17.4/cpan/Socket/Makefile.PL @@ -108,19 +108,13 @@ check_for( main => "struct sockaddr_in6 sin6; sin6.sin6_scope_id = 0;" ); +# TODO: Needs adding to perl5 core before importing dual-life again check_for( confkey => "d_ip_mreq", define => "HAS_IP_MREQ", main => "struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = INADDR_ANY;" ); -# TODO: Needs adding to perl5 core before importing dual-life again -check_for( - confkey => "d_ip_mreq_source", - define => "HAS_IP_MREQ_SOURCE", - main => "struct ip_mreq_source mreq; mreq.imr_multiaddr.s_addr = INADDR_ANY;" -); - check_for( confkey => "d_ipv6_mreq", define => "HAS_IPV6_MREQ", diff --git perl-5.17.4/cpan/Socket/Socket.pm perl-5.17.4/cpan/Socket/Socket.pm index c0dc4aa7dd..83729b290d 100644 --- perl-5.17.4/cpan/Socket/Socket.pm +++ perl-5.17.4/cpan/Socket/Socket.pm @@ -3,7 +3,7 @@ package Socket; use strict; { use 5.006001; } -our $VERSION = '2.006'; +our $VERSION = '2.004'; =head1 NAME @@ -184,8 +184,6 @@ opaque string representing the IP address (you can use inet_ntoa() to convert the address to the four-dotted numeric format). Will croak if the structure does not represent an C address. -In scalar context will return just the IP address. - =head2 $sockaddr = sockaddr_in $port, $ip_address =head2 ($port, $ip_address) = sockaddr_in $sockaddr @@ -213,8 +211,6 @@ flow label. (You can use inet_ntop() to convert the address to the usual string format). Will croak if the structure does not represent an C address. -In scalar context will return just the IP address. - =head2 $sockaddr = sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]] =head2 ($port, $ip6_address, $scope_id, $flowinfo) = sockaddr_in6 $sockaddr diff --git perl-5.17.4/cpan/Socket/Socket.xs perl-5.17.4/cpan/Socket/Socket.xs index e99eac12ef..0bdebf5ca4 100644 --- perl-5.17.4/cpan/Socket/Socket.xs +++ perl-5.17.4/cpan/Socket/Socket.xs @@ -179,9 +179,6 @@ static void *my_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 kl, #ifndef mPUSHp # define mPUSHp(p,l) sv_setpvn_mg(PUSHs(sv_newmortal()), (p), (l)) #endif /* !mPUSHp */ -#ifndef mPUSHs -# define mPUSHs(s) PUSHs(sv_2mortal(s)) -#endif /* !mPUSHs */ #ifndef CvCONST_on # undef newCONSTSUB @@ -789,7 +786,8 @@ unpack_sockaddr_in(sin_sv) { STRLEN sockaddrlen; struct sockaddr_in addr; - SV *ip_address_sv; + unsigned short port; + struct in_addr ip_address; char * sin = SvPVbyte(sin_sv,sockaddrlen); if (sockaddrlen != sizeof(addr)) { croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf, @@ -800,16 +798,12 @@ unpack_sockaddr_in(sin_sv) croak("Bad address family for %s, got %d, should be %d", "Socket::unpack_sockaddr_in", addr.sin_family, AF_INET); } - ip_address_sv = newSVpvn((char *)&addr.sin_addr, sizeof(addr.sin_addr)); + port = ntohs(addr.sin_port); + ip_address = addr.sin_addr; - if(GIMME_V == G_ARRAY) { - EXTEND(SP, 2); - mPUSHi(ntohs(addr.sin_port)); - mPUSHs(ip_address_sv); - } - else { - mPUSHs(ip_address_sv); - } + EXTEND(SP, 2); + PUSHs(sv_2mortal(newSViv((IV) port))); + PUSHs(sv_2mortal(newSVpvn((char *)&ip_address, sizeof(ip_address)))); } void @@ -860,7 +854,6 @@ unpack_sockaddr_in6(sin6_sv) STRLEN addrlen; struct sockaddr_in6 sin6; char * addrbytes = SvPVbyte(sin6_sv, addrlen); - SV *ip_address_sv; if (addrlen != sizeof(sin6)) croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf, "Socket::unpack_sockaddr_in6", (UV)addrlen, (UV)sizeof(sin6)); @@ -868,22 +861,15 @@ unpack_sockaddr_in6(sin6_sv) if (sin6.sin6_family != AF_INET6) croak("Bad address family for %s, got %d, should be %d", "Socket::unpack_sockaddr_in6", sin6.sin6_family, AF_INET6); - ip_address_sv = newSVpvn((char *)&sin6.sin6_addr, sizeof(sin6.sin6_addr)); - - if(GIMME_V == G_ARRAY) { - EXTEND(SP, 4); - mPUSHi(ntohs(sin6.sin6_port)); - mPUSHs(ip_address_sv); + EXTEND(SP, 4); + mPUSHi(ntohs(sin6.sin6_port)); + mPUSHp((char *)&sin6.sin6_addr, sizeof(sin6.sin6_addr)); # ifdef HAS_SIN6_SCOPE_ID - mPUSHi(sin6.sin6_scope_id); + mPUSHi(sin6.sin6_scope_id); # else - mPUSHi(0); + mPUSHi(0); # endif - mPUSHi(ntohl(sin6.sin6_flowinfo)); - } - else { - mPUSHs(ip_address_sv); - } + mPUSHi(ntohl(sin6.sin6_flowinfo)); #else ST(0) = (SV*)not_here("pack_sockaddr_in6"); #endif @@ -912,20 +898,11 @@ inet_ntop(af, ip_address_sv) struct_size = sizeof(addr); - switch(af) { - case AF_INET: - if(addrlen != 4) - croak("Bad address length for Socket::inet_ntop on AF_INET;" - " got %d, should be 4"); - break; + if (af != AF_INET #ifdef AF_INET6 - case AF_INET6: - if(addrlen != 16) - croak("Bad address length for Socket::inet_ntop on AF_INET6;" - " got %d, should be 16"); - break; + && af != AF_INET6 #endif - default: + ) { croak("Bad address family for %s, got %d, should be" #ifdef AF_INET6 " either AF_INET or AF_INET6", @@ -1049,7 +1026,7 @@ pack_ip_mreq_source(multiaddr, source, interface=&PL_sv_undef) SV * interface CODE: { -#if defined(HAS_IP_MREQ_SOURCE) && defined (IP_ADD_SOURCE_MEMBERSHIP) +#if defined(HAS_IP_MREQ) && defined (IP_ADD_SOURCE_MEMBERSHIP) struct ip_mreq_source mreq; char * multiaddrbytes; char * sourcebytes; @@ -1092,7 +1069,7 @@ unpack_ip_mreq_source(mreq_sv) SV * mreq_sv PPCODE: { -#if defined(HAS_IP_MREQ_SOURCE) && defined (IP_ADD_SOURCE_MEMBERSHIP) +#if defined(HAS_IP_MREQ) && defined (IP_ADD_SOURCE_MEMBERSHIP) struct ip_mreq_source mreq; STRLEN mreqlen; char * mreqbytes = SvPVbyte(mreq_sv, mreqlen); diff --git perl-5.17.4/cpan/Socket/t/sockaddr.t perl-5.17.4/cpan/Socket/t/sockaddr.t index 1ae24a0bba..63cce24309 100644 --- perl-5.17.4/cpan/Socket/t/sockaddr.t +++ perl-5.17.4/cpan/Socket/t/sockaddr.t @@ -10,7 +10,7 @@ use Socket qw( sockaddr_family sockaddr_un ); -use Test::More tests => 33; +use Test::More tests => 31; # inet_aton, inet_ntoa { @@ -73,8 +73,6 @@ SKIP: { is( (unpack_sockaddr_in($sin))[0] , 100, 'pack_sockaddr_in->unpack_sockaddr_in port'); is(inet_ntoa((unpack_sockaddr_in($sin))[1]), "10.20.30.40", 'pack_sockaddr_in->unpack_sockaddr_in addr'); - is(inet_ntoa(scalar unpack_sockaddr_in($sin)), "10.20.30.40", 'unpack_sockaddr_in in scalar context yields addr'); - is_deeply( [ sockaddr_in($sin) ], [ unpack_sockaddr_in($sin) ], 'sockaddr_in in list context unpacks' ); @@ -85,8 +83,8 @@ SKIP: { # pack_sockaddr_in6, unpack_sockaddr_in6 # sockaddr_in6 SKIP: { - skip "No AF_INET6", 9 unless my $AF_INET6 = eval { Socket::AF_INET6() }; - skip "Cannot pack_sockaddr_in6()", 9 unless my $sin6 = eval { Socket::pack_sockaddr_in6(0x1234, "0123456789abcdef", 0, 89) }; + skip "No AF_INET6", 8 unless my $AF_INET6 = eval { Socket::AF_INET6() }; + skip "Cannot pack_sockaddr_in6()", 8 unless my $sin6 = eval { Socket::pack_sockaddr_in6(0x1234, "0123456789abcdef", 0, 89) }; ok(defined $sin6, 'pack_sockaddr_in6 defined'); @@ -97,8 +95,6 @@ SKIP: { is((Socket::unpack_sockaddr_in6($sin6))[2], 0, 'pack_sockaddr_in6->unpack_sockaddr_in6 scope_id'); is((Socket::unpack_sockaddr_in6($sin6))[3], 89, 'pack_sockaddr_in6->unpack_sockaddr_in6 flowinfo'); - is(scalar Socket::unpack_sockaddr_in6($sin6), "0123456789abcdef", 'unpack_sockaddr_in6 in scalar context yields addr'); - is_deeply( [ Socket::sockaddr_in6($sin6) ], [ Socket::unpack_sockaddr_in6($sin6) ], 'sockaddr_in6 in list context unpacks' ); diff --git perl-5.17.4/pod/perldelta.pod perl-5.17.4/pod/perldelta.pod index 52eaf8f1f5..78f169f953 100644 --- perl-5.17.4/pod/perldelta.pod +++ perl-5.17.4/pod/perldelta.pod @@ -308,10 +308,7 @@ opcodes. =item * -L has been upgraded from version 2.004 to 2.006. -C and C now return just the IP -address in scalar context, and C now guards against incorrect -length scalars being passed in. +L has been upgraded from version A.xx to B.yy. =item * -- 2.49.1