| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Wrong for some failure conditions, anyway. It should get fixed early in
5.31, make the cutoff here 5.31.2 to give us some leeway, so don't have
to change Devel::PPPort again.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In general perl doesn't try to preserve errno (aka $!) since we're
aiming at the same behaviour as for C code - errno is only meaningful
if a function returned an error.
The exception to that is when perl is working without an explicit
request from the perl programmer.
When code is performing assignments, concatenating strings, pushing on
arrays etc, perl is exercising the memory allocation machinery,
calling malloc() and realloc().
It turns out that at least on one platform, realloc() can modify errno
on success.
It appears to be happening when jemalloc (the malloc() implementation
used on FreeBSD) tries to extend a memory arena and fails, leaving the
error number from that failure in errno, from truss:
mmap(0x80142f000,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON|MAP_EXCL,-1,0x0) ERR#12 'Cannot allocate memory'
This magic call appears to be a FreeBSD specific mechanism to resize
the anonymous mapping. On Linux the equivalent seems to be calling
mremap().
In each case for the test code mmap() is successfully called
immediately afterwards:
mmap(0x0,69632,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON|MAP_ALIGNED(12),-1,0x0) = 34390323200 (0x801d2b000)
and realloc() succeeds.
glibc() realloc seems to be simpler, AFAICT from reading the code it
only uses mremap() when the memory block is the entire mapping,
ie. for large blocks rather than for memory arenas, and it doesn't
request the same address, so it doesn't fail.
For blocks that are part of arenas, glibc tries to expand in-place
within the current arena (with no extending the arena itself) or falls
back to malloc, so there's no chance for errno to be changed on a
successful realloc().
|
|
|
|
|
|
|
|
| |
When building on current Darwin but deploying to macOS 10.11.x or
earlier, we need to convince Time::HiRes to use its override of
clock_gettime() rather than the system-supplied one.
Addresses [perl #128972].
|
|
|
|
|
|
|
| |
This reverts commit 9ddfdb573eecc4201e23e59c82335dbdd9e7c7d3.
It turns out that strtod() isn't less accurate than atof() on this
platform; it's generally more accurate. We still don't fully understand
the situation, but the answer isn't this commit.
|
|
|
|
|
|
|
|
| |
At the end of a constant, we add a trailing NUL. This commit makes sure
there's room for it. But the code earlier was supposed to have already
made enough space, so its a bug if there isn't enough space. So on
DEBUGGING builds, we panic, as we've done before. But otherwise we can
continue on with no actual harm having been done.
|
|
|
|
|
|
|
|
|
|
|
| |
This bug happens under tr///. In some circumstances, a byte is inserted
in the output that wasn't in the input, and it did not check that there
was space available for this character. The result could be a write
after the buffer end.
I suspect that this bug has been there all along, and the blamed commit
rearranged things so that it is more likely to happen; it depends on
needing to malloc in just the wrong place.
|
| |
|
| |
|
|
|
|
| |
porting/test_bootstrap prevents most use of use in t/comp
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The blamed commit simplified some code based on the assumption that
UTF-8 well-formedness had already been verified. It had an assertion to
verify this. The test case shows that there is a path, through 'eval',
that bypasses this usual checking.
The checking was based on the assumption that the program started not in
UTF-8, and something like a 'use utf8' would be needed to get it there,
at which point a flag would be set to the effect that well-formedness
should be checked. But it turns out that a string eval (perhaps other
things) gets parsed separately and so the flag wasn't set, so no
well-formedness checking was being done.
The solution is a one word change, to initialize the flag to TRUE "'yes,
check" instead of FALSE "no, don't check" in the initialization routine
run at the beginning of lexing a code unit. This catches eval and
presumably anything else that was being bypassed.
The checking is only actually done if the code being lexed is known to
be in UTF-8. This will continue to get turned on by the ways it
currently gets turned on, such as 'use utf8'.
|
|
|
|
|
|
|
|
|
| |
This turns out to be that strtod() is less accurate on this platform
than atof(). I looked at the difference, and a test failed that was
failing in this module was the difference between a 0 and a 1 in the
final digit.
The solution is to forbid in the hints file using strtod
|
| |
|
|
|
|
|
|
| |
3.51 - 2019-05-01
* include the module version in metadata for proper PAUSE indexing
|
| |
|
|
|
|
|
|
|
|
|
| |
dromedary:/home/tux/Text-CSV_XS$ release -t
showed 5.6.1 as first FAIL:
undefined symbol: packWARN
After this, release -t on dromedary passed 5.6.1 .. 5.29.8
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Behavior marked as undefined by the C standard should be avoided. Its
a simple matter to fix this .t to not have such behavior.
In general, the programmer may not have control over the input string
being parsed to convert to a number, and so it could be too large or
tiny for the available precision and hence result in undefined behavior.
That is something that is unavoidable.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
uv uses UNLIKELY before it gets undefined in misc, which will be the
case fro perl-5.8.8 and below
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This the context of this commit (v5.29.10-31-g613175fa07) was
accidentally reverted by v5.29.10-25-gaadf4f9e12, so I'm re-applying it
blead here.
-------
The leaky code is only used during test. It creates 3 ops, does various
operations related to linking OpSIBLINGs, then fails to free them.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This tests the outputs of various runs of bench.pl and checks that the
output it gets matches various templates. Parts of these templates of
these formats are, e.g.
NNN.NN NNN.NN NNN.NN
which are pre-processed into a regex that matches e.g.
(\d+\.\d\d|-)
i.e. match either a two-sig-diff number of a '-' - that latter
indicating no valid result.
However, once, space-skipping is taken into account, the combination of
skipping any spaces before the number, and expecting 3 blank spaces
before the '-' means that '-' fields never matched.
Fix this by simplifying the generated regex.
See http://nntp.perl.org/group/perl.perl5.porters/254590
|
|
|
|
|
|
|
|
|
|
| |
The code was doing Safefree(in[i++]) in a loop,
but Safefree() is a macro which may evaluate its arg multiple times,
causing to i to get multipally incremented and thus skipping over some
items that need freeing.
This module is only used for build and test and isn't isn't installed,
so this fix is for the benefit of smokers rather than end users.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
Update dist/Devel-PPPort after recent work
from khw to provide UNICODE_REPLACEMENT
Note that 3.46 is also released to CPAN.
|