File perl-Socket-MsgHdr.diff of Package perl-Socket-MsgHdr
--- ./MsgHdr.xs.orig 2010-01-07 03:35:06.000000000 +0000
+++ ./MsgHdr.xs 2010-01-07 11:20:12.000000000 +0000
@@ -147,11 +147,11 @@ smh_recvmsg(s, msg_hdr, flags = 0)
hsh = (HV*) SvRV(msg_hdr);
- if ((svp = hv_fetch(hsh, "name", 4, FALSE)))
+ if ((svp = hv_fetch(hsh, "name", 4, FALSE)) && SvOK(*svp))
SvCUR_set(*svp, mh.m.msg_namelen);
- if ((svp = hv_fetch(hsh, "buf", 3, FALSE)))
+ if ((svp = hv_fetch(hsh, "buf", 3, FALSE)) && SvOK(*svp))
SvCUR_set(*svp, RETVAL);
- if ((svp = hv_fetch(hsh, "control", 7, FALSE)))
+ if ((svp = hv_fetch(hsh, "control", 7, FALSE)) && SvOK(*svp))
SvCUR_set(*svp, mh.m.msg_controllen);
}
OUTPUT:
--- ./lib/Socket/MsgHdr.pm.orig 2010-01-07 03:50:56.000000000 +0000
+++ ./lib/Socket/MsgHdr.pm 2010-01-07 11:19:14.000000000 +0000
@@ -39,6 +39,10 @@ INIT {
no strict 'refs';
*{$attr . "len"} = sub {
my $self = shift;
+ if (!defined($self->{$attr})) {
+ return 0 unless @_;
+ $self->{$attr} = '';
+ }
my $olen = length($self->$attr);
return $olen unless @_;
my $nlen = shift;