| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
This actually saves space, because xsubpp has to use each XS function's full
name as a constant string to pass to newXS(), so any re-use of it is free.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Based on a patch by AUGUSTE-ETIENNE José <jose.auguste-etienne@cgss-guyane.fr>
The attached patches are necessary to work around aix 4.2 lack of support for IPv6,
and limited support for POSIX sigaction()
The hints/aix_4.sh patch solves the following build failure:
"Socket.xs", line 468.16: 1506-007 (S) "struct in6_addr" is undefined.
The ext/POSIX/t/sigaction.t patch solves the failing test reported a looong time ago:
http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2006-01/msg01124.html
After testing a simple C program using POSIX sigaction() with SA_SIGINFO,
I found that it worked on aix 4.3 but failed on aix 4.2.
I think it's safe to skip the SA_SIGINFO test on the aix 4.2 platform.
perl 5.12.0 builds fine on the following platforms / C compiler :
aix 4.2.1 / vac 5.0.2.7 (with attached patches)
aix 4.3.2 / gcc 2.95.3
aix 4.3.3 / vac 4.4.0.3
aix 4.3.3 / vac 5.0.28
aix 5.2 / GNUpro gcc 2.9.aix51.020209
The atatched patches should be applied to blead and maint.
|
| |
|
|
|
|
| |
Errors in open3 no longer appear to originate from the executed command on forking systems.
|
| |
|
|
|
|
|
|
|
| |
There's a small bug in lex_stuff_pvn() that causes spurious syntax errors
in an obscure situation. It happens if stuffing is performed on the
last line of a file, and the line ends with a statement that lacks its
terminating semicolon. Attached patch fixes and adds test.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| | |
Add an sv_count() function to XS::APItest to allow access to PL_sv_count,
then add new test file t/op/svleak.t that allows you yo run a code
fragment a few times and test whether the number of allocated SVs has
increased
|
| |
| |
| |
| |
| | |
than EXPORT as they're new functions which clobber symbols in downstream
CPAN modules.
|
|/
|
|
| |
https://bugs.launchpad.net/ecryptfs/+bug/390833)
|
|
|
|
| |
Spotted by Olivier Raginel.
|
|
|
|
|
|
|
|
| |
Since the module reorganisation and now that tests run cd'ed to
ext/Fcntl, expecting to run ../perl no longer works.
Also, for the benefit of future generations, make the inability
to find perl a failure rather than a skip, with a more relevant error
message.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Socket6 implementation of inet_pton.
Fix for release-blocking ticket [perl #72884]
> |https://rt.cpan.org/Ticket/Display.html?id=52497|4411113f|NJH/IO-Socket-Multicast6-0.03.tar.gz |
I'll describe what's happening here, and leave it to everyone else to decide
which of the interacting events is the bug, or where the fix might be.
So the *entire* change is this:
commit 4411113f31b3f00171bb335092b02104d29d7cd7
Author: Rafael Garcia-Suarez <rgarciasuarez@gmail.com>
Date: Fri Mar 27 13:19:16 2009 +0100
Add inet_pton and inet_ntop to the list of functions exported by Socket
diff --git a/ext/Socket/Socket.pm b/ext/Socket/Socket.pm
index 6b268ef..7d130ba 100644
--- a/ext/Socket/Socket.pm
+++ b/ext/Socket/Socket.pm
@@ -198,6 +198,7 @@ use XSLoader ();
@ISA = qw(Exporter);
@EXPORT = qw(
inet_aton inet_ntoa
+ inet_pton inet_ntop
sockaddr_family
pack_sockaddr_in unpack_sockaddr_in
pack_sockaddr_un unpack_sockaddr_un
and test fails like this:
$ /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/bin/perl5.11.4 -Mblib t/35mcastsend.t
1..11
Constant subroutine IO::Socket::Multicast6::AF_INET6 redefined at /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/lib/perl5/5.11.4/Exporter.pm line 64.
at /home/nick/.cpan/build/IO-Socket-Multicast6-0.03-CqGAYT/blib/lib/IO/Socket/Multicast6.pm line 10
Prototype mismatch: sub IO::Socket::Multicast6::AF_INET6 () vs none at /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/lib/perl5/5.11.4/Exporter.pm line 64.
at /home/nick/.cpan/build/IO-Socket-Multicast6-0.03-CqGAYT/blib/lib/IO/Socket/Multicast6.pm line 10
Constant subroutine IO::Socket::Multicast6::PF_INET6 redefined at /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/lib/perl5/5.11.4/Exporter.pm line 64.
at /home/nick/.cpan/build/IO-Socket-Multicast6-0.03-CqGAYT/blib/lib/IO/Socket/Multicast6.pm line 10
Prototype mismatch: sub IO::Socket::Multicast6::PF_INET6 () vs none at /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/lib/perl5/5.11.4/Exporter.pm line 64.
at /home/nick/.cpan/build/IO-Socket-Multicast6-0.03-CqGAYT/blib/lib/IO/Socket/Multicast6.pm line 10
ok 1 - use IO::Socket::Multicast6;
ok 2 - Create IPv4 multicast socket
ok 3 - Combined IPv4 destination address and port
ok 4 - Separate IPv4 destination address and port
Bad arg length for Socket::pack_sockaddr_in, length is 16, should be 4 at t/35mcastsend.t line 26.
The warnings aren't actually really relevant. The "problem"s are:
IO::Socket::Multicast6 isa IO::Socket::INET6
IO::Socket::INET6 isa IO::Socket
so they chose to inherit all behaviour from IO::Socket. In turn
IO::Socket isa IO::Handle isa Exporter.
IO::Socket chooses to export everything that Socket does:
sub import {
my $pkg = shift;
if (@_ && $_[0] eq 'sockatmark') { # not very extensible but for now, fast
Exporter::export_to_level('IO::Socket', 1, $pkg, 'sockatmark');
} else {
my $callpkg = caller;
Exporter::export 'Socket', $callpkg, @_;
}
}
So, this means that all those choices and delegation of behaviour (and
responsibility) means that all those modules export whatever Socket exports.
OO modules.
So, now they also export inet_pton and inet_ntop.
The test is careful to only import what it needs:
use strict;
use Socket6 qw/ inet_pton pack_sockaddr_in6/;
use Socket qw/ pack_sockaddr_in /;
use Test::More tests => 11;
in particular, it wants inet_pton from Socket6, and only pack_sockaddr_in
from Socket. So at that point, main::inet_pton is Socket6::inet_pton
Then it does this, correctly in a BEGIN block:
BEGIN { use_ok( 'IO::Socket::Multicast6' ); }
The side effect of this is to import all exports from IO::Socket::Multicast6.
Which, from the above chain of inheritance, is @Socket::EXPORT.
So at this point, main::inet_pton is rebound to Socket::inet_pton
And the test fails, because they differ, and it expected (and wanted)
Socket6::inet_pton(). Socket6::inet_pton() returns 4 bytes for AF_INET, 16
bytes for AF_INET6. Socket::inet_pton() returns 16 for both.
Socket::pack_sockaddr_in() wants 4 bytes.
Now, to add to the fun:
use IO::Socket::Multicast6 ();
and
use IO::Socket::Multicast6;
of course mean different things. The former suppresses all exports.
It turns out that with Test::More::isa_ok() has no way of doing the former:
$ cat use_ok.pl
use warnings;
use strict;
use Test::More tests => 3;
package clash;
BEGIN { main::use_ok 'Socket' };
package crunch;
BEGIN { main::use_ok 'Socket', () };
package biff;
BEGIN { main::use_ok 'Socket', 'sockaddr_family' };
package main;
sub dump_lowercase_keys {
my $package = shift;
print "For package $package:\n";
no strict 'refs';
print " $_\n" foreach sort grep {!tr/A-Z//} keys %{"${package}::"};
print "\n";
}
dump_lowercase_keys $_ foreach qw (clash crunch biff);
__END__
$ perl use_ok.pl
1..3
ok 1 - use Socket;
ok 2 - use Socket;
ok 3 - use Socket;
For package clash:
inet_aton
inet_ntoa
pack_sockaddr_in
pack_sockaddr_un
sockaddr_family
sockaddr_in
sockaddr_un
unpack_sockaddr_in
unpack_sockaddr_un
For package crunch:
inet_aton
inet_ntoa
pack_sockaddr_in
pack_sockaddr_un
sockaddr_family
sockaddr_in
sockaddr_un
unpack_sockaddr_in
unpack_sockaddr_un
For package biff:
sockaddr_family
So, there's no clean way to rewrite that test with use_ok to suppress imports.
So, to summarise, it's due to
A cascade of modules blindly exporting everything that Socket exports
Socket::inet_pton() and Socket6::inet_pton() differing in behaviour
A test that fails to realise that it's importing everything via use_ok
This one ranks as blocker because:
Socket::inet_pton() and Socket::inet_ntop() are not in any stable release
Hence we have the option to change them if we do it *NOW*.
I think that the right fix is the appended patch. This makes the new Socket
implementation of inet_pton consistent with the existing Socket6
implementation of inet_pton.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
$ ./perl -lwe '$a = ${qr//}; $a = 2; print re::is_regexp(\$a)'
1
It is possible for arbitrary SVs (eg PAD entries) to be upgraded to
SVt_REGEXP. (This is new with first class regexps)
Whilst the example above does not SEGV, it will be possible to write
code that will cause SEGVs (or worse) at the point when the scalar is freed,
because the code in sv_clear() assumes that all scalars of type
SVt_REGEXP *are* regexps, and passes them to pregfree2(), which assumes that
pointers within are valid.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
blessing filehandles into FileHandle
It turns out that it's not quite as simple as blessing into IO::File.
If you do (just) that, then it breaks any existing code that does
C<require IO::Handle;> to allow it to call methods on file handles,
because they're blessed into IO::File, which isn't loaded. (Note this code
doesn't assume that methods in IO::Seekable are there to be called)
So, it all should work if you also set @IO::File:::ISA correctly?
That way, code that assumes that methods from IO::Handle can be called will
work. However, gv.c now starts complaining (but not failing) if IO::Handle,
IO::Seekable and Exporter aren't present, because it goes looking for
methods in them.
So the solution seems to be to set @IO::File::ISA *and* create (empty)
stashes for the other 3 packages. Patch appended, but not applied.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Date: Thu, 07 Jan 2010 00:36:25 -0800
Message-ID: <rt-3.6.HEAD-1505-1262853384-1207.71676-15-0@perl.org>
Tweaked as suggested in:
From: "H.Merijn Brand" <h.m.brand@xs4all.nl>
Date: Fri, 8 Jan 2010 13:35:17 +0100
Message-ID: <20100108133517.1f2916d3@pc09.procura.nl>
|
| |
|
|
|
|
| |
Make them mandatory warnings.
|
| |
|
|
|
|
| |
expression also requires "use re 'eval'", just as '(?{ code })' does.
|
|
|
|
| |
using a 'regex'/'regexp' mash.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of returning a(nother) reference to the (pre-compiled) regexp in the
optree, use reg_temp_copy() to create a copy of it, and return a reference to
that. This resolves issues about Regexp::DESTROY not being called in a timely
fashion (the original bug tracked by RT #69852), as well as bugs related to
blessing regexps, and of assigning to regexps, as described in correspondence
added to the ticket.
It transpires that we also need to undo the SvPVX() sharing when ithreads
cloning a Regexp SV, because mother_re is set to NULL, instead of a cloned
copy of the mother_re. This change might fix bugs with regexps and threads in
certain other situations, but as yet neither tests nor bug reports have
indicated any problems, so it might not actually be an edge case that it's
possible to reach.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| | |
There is the assignment "RETVAL = 0" to silence the compiler in case
it incorrectly reports return of an undefined value.
This assignment should be present whenever *any* of the symbols is
not defined. But the code was written so that the assignment was
compiled only when *none* of the symbols was defined.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Attached is a patch that adds a public API for the lowest layers of
lexing. This is meant to provide a solid foundation for the parsing that
Devel::Declare and similar modules do, and it complements the pluggable
keyword mechanism. The API consists of some existing variables combined
with some new functions, all marked as experimental (which making them
public certainly is).
|
| |
| |
| |
| | |
And bump the $VERSION.
|
| |
| |
| |
| |
| | |
Its real name is EXIT_FAILURE and it comes out of the wash somewhat
differently on VMS than elsewhere.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
Rationale: This makes the behaviour of my_exit consistent, so it no
longer depends on whether a subroutine was called using call_sv or as a
normal using an entersub op. Previously, the exit code was sometimes
converted to an exception.
|
| |
| |
| |
| |
| |
| | |
Since Nicholas made pad_findmy() part of the public API
(f8f98e0a8bdbde83a9cdc3573d818f69d0a64c78), here's a consequential
change to XS::APItest::KeywordRPN.
|
| |
| |
| |
| | |
[perl #70303] I18N::Langinfo docs "nothing exported"
|
| |
| |
| |
| |
| |
| |
| |
| | |
API.
Currently no flags bits are used, and the length is cross-checked against
strlen() on the pointer, but the intent is to re-work the entire pad API to be
UTF-8 aware, from the current situation of char * pointers only.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A smoke using g++ has revealed:
>KeywordRPN.c: In function 'void XS_XS__APItest__KeywordRPN_import(CV*)':
>KeywordRPN.c:320: error: expected unqualified-id before 'class'
>KeywordRPN.c:320: error: expected initializer before 'class'
>KeywordRPN.c: In function 'void XS_XS__APItest__KeywordRPN_unimport(CV*)':
>KeywordRPN.c:357: error: expected unqualified-id before 'class'
>KeywordRPN.c:357: error: expected initializer before 'class'
>make[1]: *** [KeywordRPN.o] Error 1
>Unsuccessful make(ext/XS-APItest-KeywordRPN): code=512 at make_ext.pl line 449.
>make: *** [lib/auto/XS/APItest/KeywordRPN/KeywordRPN.so] Error 25
I used "class" as a variable name, but in C++ it's a keyword. Patch
attached. Someone should also add a note about C++ compatibility to
perlhack.pod.
-zefram
Signed-off-by: H.Merijn Brand <h.m.brand@xs4all.nl>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Date: Tue, 27 Oct 2009 01:29:40 +0000
From: Zefram <zefram@fysh.org>
To: perl5-porters@perl.org
Subject: bareword sub lookups
Attached is a patch that changes how the tokeniser looks up subroutines,
when they're referenced by a bareword, for prototype and const-sub
purposes. Formerly, it has looked up bareword subs directly in the
package, which is contrary to the way the generated op tree looks up
the sub, via an rv2cv op. The patch makes the tokeniser generate the
rv2cv op earlier, and dig around in that.
The motivation for this is to allow modules to hook the rv2cv op
creation, to affect the name->subroutine lookup process. Currently,
such hooking affects op execution as intended, but everything goes wrong
with a bareword ref where the tokeniser looks at some unrelated CV,
or a blank space, in the package. With the patch in place, an rv2cv
hook correctly affects the tokeniser and therefore the prototype-based
aspects of parsing.
The patch also changes ck_subr (which applies the argument context and
checking parts of prototype behaviour) to handle subs referenced by an
RV const op inside the rv2cv, where formerly it would only handle a gv
op inside the rv2cv. This is to support the most likely kind of modified
rv2cv op.
[This commit includes the Makefile.PL for XS-APITest-KeywordRPN missing
from the original patch, as well as updates to perldiag.pod and a
MANIFEST sort]
|
|/ |
|
|
|
|
|
|
| |
regcomp.c stopped using it before 5.10, leaving only toke.c. The only code on
CPAN that uses it is copies of regcomp.c. Replace it with a static function,
with a cleaner interface.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Also revert 8902bb05b18c9858efa90229ca1ee42b17277554 as it merely
masked one symptom of the deeper problems.
Also fixes RT #69973, which was a segfault which was exposed by
8902bb05, see the ticket for further details.
http://rt.perl.org/rt3//Public/Bug/Display.html?id=69973
At the code of this is the problem that in unicode matching a bunch
of code points have case folding rules beyond just A-Z/a-z. Since
the case folding rules are decided at runtime by the string, we cant
use the same TRIE tables for both unicode/non-unicode matching.
Until this is reconciled or some other solution is found case insensitive
matching only gets the TRIE optimisation when the pattern is uniocde.
From CaseFolding.txt:
00B5; C; 03BC; # MICRO SIGN
00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE
00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE
00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE
00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS
00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE
00C6; C; 00E6; # LATIN CAPITAL LETTER AE
00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA
00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE
00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE
00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS
00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE
00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE
00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS
00D0; C; 00F0; # LATIN CAPITAL LETTER ETH
00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE
00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE
00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE
00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE
00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS
00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE
00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE
00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE
00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS
00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE
00DE; C; 00FE; # LATIN CAPITAL LETTER THORN
00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
|
| |
|
| |
|