Skip to content

Commit 22496f1

Browse files
leonerdjkeenan
authored andcommitted
cpan/Socket - Update to version 2.040
2.040 2025-07-16 [BUGFIXES] * Fix test skip count for INET6 sockaddr tests (RT168005) (no code change other than unit tests) 2.039 2025-06-25 [BUGFIXES] * Make sure to invoke GETMAGIC on arguments to `pack_sockaddr_in` and `pack_sockaddr_in6` (RT166524)
1 parent 5d3d5d7 commit 22496f1

File tree

4 files changed

+32
-12
lines changed

4 files changed

+32
-12
lines changed

Porting/Maintainers.pl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,8 +1034,8 @@ package Maintainers;
10341034
},
10351035

10361036
'Socket' => {
1037-
'DISTRIBUTION' => 'PEVANS/Socket-2.038.tar.gz',
1038-
'SYNCINFO' => 'LeoNerd on Sat Apr 27 09:57:02 2024',
1037+
'DISTRIBUTION' => 'PEVANS/Socket-2.040.tar.gz',
1038+
'SYNCINFO' => 'jkeenan on Wed Jul 16 09:34:44 2025',
10391039
'FILES' => q[cpan/Socket],
10401040
'EXCLUDED' => ['.editorconfig'],
10411041
},

cpan/Socket/Socket.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package Socket;
33
use v5.6.1;
44
use strict;
55

6-
our $VERSION = '2.038';
6+
our $VERSION = '2.040';
77

88
=head1 NAME
99

cpan/Socket/Socket.xs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -997,17 +997,21 @@ pack_sockaddr_in(port_sv, ip_address_sv)
997997
STRLEN addrlen;
998998
unsigned short port = 0;
999999
char * ip_address;
1000+
1001+
SvGETMAGIC(port_sv);
10001002
if (SvOK(port_sv)) {
1001-
port = SvUV(port_sv);
1002-
if (SvUV(port_sv) > 0xFFFF)
1003+
port = SvUV_nomg(port_sv);
1004+
if (SvUV_nomg(port_sv) > 0xFFFF)
10031005
warn("Port number above 0xFFFF, will be truncated to %d for %s",
10041006
port, "Socket::pack_sockaddr_in");
10051007
}
1008+
1009+
SvGETMAGIC(ip_address_sv);
10061010
if (!SvOK(ip_address_sv))
10071011
croak("Undefined address for %s", "Socket::pack_sockaddr_in");
1012+
ip_address = SvPVbyte_nomg(ip_address_sv, addrlen);
10081013
if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
10091014
croak("Wide character in %s", "Socket::pack_sockaddr_in");
1010-
ip_address = SvPVbyte(ip_address_sv, addrlen);
10111015
if (addrlen == sizeof(addr) || addrlen == 4)
10121016
addr.s_addr =
10131017
(unsigned int)(ip_address[0] & 0xFF) << 24 |
@@ -1073,17 +1077,21 @@ pack_sockaddr_in6(port_sv, sin6_addr, scope_id=0, flowinfo=0)
10731077
struct sockaddr_in6 sin6;
10741078
char * addrbytes;
10751079
STRLEN addrlen;
1080+
1081+
SvGETMAGIC(port_sv);
10761082
if (SvOK(port_sv)) {
1077-
port = SvUV(port_sv);
1078-
if (SvUV(port_sv) > 0xFFFF)
1083+
port = SvUV_nomg(port_sv);
1084+
if (SvUV_nomg(port_sv) > 0xFFFF)
10791085
warn("Port number above 0xFFFF, will be truncated to %d for %s",
10801086
port, "Socket::pack_sockaddr_in6");
10811087
}
1088+
1089+
SvGETMAGIC(sin6_addr);
10821090
if (!SvOK(sin6_addr))
10831091
croak("Undefined address for %s", "Socket::pack_sockaddr_in6");
1092+
addrbytes = SvPVbyte_nomg(sin6_addr, addrlen);
10841093
if (DO_UTF8(sin6_addr) && !sv_utf8_downgrade(sin6_addr, 1))
10851094
croak("Wide character in %s", "Socket::pack_sockaddr_in6");
1086-
addrbytes = SvPVbyte(sin6_addr, addrlen);
10871095
if (addrlen != sizeof(sin6.sin6_addr))
10881096
croak("Bad arg length %s, length is %" UVuf ", should be %" UVuf,
10891097
"Socket::pack_sockaddr_in6", (UV)addrlen, (UV)sizeof(sin6.sin6_addr));

cpan/Socket/t/sockaddr.t

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use Socket qw(
1212
sockaddr_family
1313
sockaddr_un
1414
);
15-
use Test::More tests => 50;
15+
use Test::More tests => 52;
1616

1717
# inet_aton, inet_ntoa
1818
{
@@ -99,13 +99,19 @@ SKIP: {
9999
'pack_sockaddr_in oversized port is allowed' );
100100
like( $warnings, qr/^Port number above 0xFFFF, will be truncated to 33229 for Socket::pack_sockaddr_in at /,
101101
'pack_sockaddr_in oversized port warning' );
102+
103+
# GETMAGIC is invoked (RT166524)
104+
local $1;
105+
"2057" =~ m/^(\d+)$/;
106+
$sin = pack_sockaddr_in $1, inet_aton("10.20.30.40");
107+
is( (unpack_sockaddr_in($sin))[0], 2057, 'pack_sockaddr_in invokes GETMAGIC on port argument' );
102108
}
103109

104110
# pack_sockaddr_in6, unpack_sockaddr_in6
105111
# sockaddr_in6
106112
SKIP: {
107-
skip "No AF_INET6", 15 unless my $AF_INET6 = eval { Socket::AF_INET6() };
108-
skip "Cannot pack_sockaddr_in6()", 15 unless my $sin6 = eval { Socket::pack_sockaddr_in6(0x1234, "0123456789abcdef", 0, 89) };
113+
skip "No AF_INET6", 16 unless my $AF_INET6 = eval { Socket::AF_INET6() };
114+
skip "Cannot pack_sockaddr_in6()", 16 unless my $sin6 = eval { Socket::pack_sockaddr_in6(0x1234, "0123456789abcdef", 0, 89) };
109115

110116
ok(defined $sin6, 'pack_sockaddr_in6 defined');
111117

@@ -140,6 +146,12 @@ SKIP: {
140146
'pack_sockaddr_in6 oversized port is allowed' );
141147
like( $warnings, qr/^Port number above 0xFFFF, will be truncated to 33229 for Socket::pack_sockaddr_in6 at /,
142148
'pack_sockaddr_in6 oversized port warning' );
149+
150+
# GETMAGIC is invoked (RT166524)
151+
local $1;
152+
"2057" =~ m/^(\d+)$/;
153+
$sin6 = Socket::pack_sockaddr_in6 $1, "0123456789abcdef";
154+
is( (Socket::unpack_sockaddr_in6($sin6))[0], 2057, 'pack_sockaddr_in6 invokes GETMAGIC on port argument' );
143155
}
144156

145157
# sockaddr_un on abstract paths

0 commit comments

Comments
 (0)