summaryrefslogtreecommitdiff
path: root/perl.c
Commit message (Collapse)AuthorAgeFilesLines
* Replace common Emacs file-local variables with dir-localsDagfinn Ilmari Mannsåker2015-03-221-6/+0
| | | | | | | | | | | | | | | | An empty cpan/.dir-locals.el stops Emacs using the core defaults for code imported from CPAN. Committer's work: To keep t/porting/cmp_version.t and t/porting/utils.t happy, $VERSION needed to be incremented in many files, including throughout dist/PathTools. perldelta entry for module updates. Add two Emacs control files to MANIFEST; re-sort MANIFEST. For: RT #124119.
* PL_custom_op{s,_names,_descs} should be set to NULL in perl_destruct().Nicholas Clark2015-03-171-0/+7
| | | | | | | | | | | | | | | Otherwise SEGVs and other jollity can happen if the interpreter is created a second (or subsequent) time, and modules attempt to register custom OPs (using either the old or new approaches). These appear to have been bugs since the relevant code was introduced (new approach in v5.14.0, old approach in v5.8.0) This probably only affects mod_perl built against a perl without ithreads, which makes it unlikely that many folks hit it with OS distributions. You'd need to (at least) be building your own perl, using mod_perl, and using a module that uses custom OPs.
* don't test non-null argsDavid Mitchell2015-03-111-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For lots of core functions: if a function parameter has been declared NN in embed.fnc, don't test for nullness at the start of the function, i.e. eliminate code like if (!foo) ... On debugging builds the test is redundant, as the PERL_ARGS_ASSERT_FOO at the start of the function will already have croaked. On optimised builds, it will skip the check (and so be slightly faster), but if actually passed a null arg, will now crash with a null-deref SEGV rather than doing whatever the check used to do (e.g. croak, or silently return and let the caller's code logic to go awry). But hopefully this should never happen as such instances will already have been detected on debugging builds. It also has the advantage of shutting up recent clangs which spew forth lots of stuff like: sv.c:6308:10: warning: nonnull parameter 'bigstr' will evaluate to 'true' on first encounter [-Wpointer-bool-conversion] if (!bigstr) The only exception was in dump.c, where rather than skipping the null test, I instead changed the function def in embed.fnc to allow a null arg, on the basis that dump functions are often used for debugging (where pointers may unexpectedly become NULL) and it's better there to display that this item is null than to SEGV. See the p5p thread starting at 20150224112829.GG28599@iabyn.com.
* [perl #123814] replace grok_atou with grok_atoUVHugo van der Sanden2015-03-091-13/+21
| | | | | | | | | | | | Some questions and loose ends: XXX gv.c:S_gv_magicalize - why are we using SSize_t for paren? XXX mg.c:Perl_magic_set - need appopriate error handling for $) XXX regcomp.c:S_reg - need to check if we do the right thing if parno was not grokked Perl_get_debug_opts should probably return something unsigned; not sure if that's something we can change.
* perl.c: Don't read possibly zapped memoryKarl Williamson2015-03-091-0/+4
| | | | | | | | | | | | | See https://rt.perl.org/Ticket/Display.html?id=123748 The return of getenv() is a pointer to static storage which can legally be overwritten at any time by other calls to access the environment, even even another getenv(). (What actually happens varies from platform to platform.) Results of getenv() therefore either have to be acted on immediately or copied to a safe area. This commit does the latter for this call in perl.c. The static area was being held on to even into the function call moreswitches() which does environmen handling, so was vulnerable to this bug.
* Skip PL_warn_locale use unless compiled inKarl Williamson2015-03-071-0/+4
| | | | | | | The use of this variable was inconsistent. It was not dup'ed on thread cloning unless LC_CTYPE is being used, but elsewhere it was. This led to segfaults on threaded builds. Now it isn't touched anywhere unless LC_CTYPE is used.
* sprinkle NOTREACHED and FALLTHROUGHDavid Mitchell2015-03-051-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | Coverity complains bitterly about many switch statements in lots of files. Many of these are of the form: case FOO: ... goto baz; case BAR: .... and something as smart as Coverity shouldn't really be complaining about a missing 'break' when the last statement of the previous branch is an unconditional goto/return/continue. But I've shoved in a bunch of 'NOTREACHED' to hopefully shut it up. Missing 'FALLTHROUGH' comments were more reasonable, and I've added them where appropriate. The only confusing one was cx_dup(), where the various CXt_LOOP_ branches all fell through to the next one, and it took a while to figure out that those weren't bugs.
* fix some spurious PERL_UNUSED_ARG/VAR() usageJasmine Ngan2015-02-241-1/+1
| | | | | The 'output_warning' param is actually used, and 'items' is not a function argument but a local variable.
* \s matching VT is no longer experimentalKarl Williamson2015-02-211-1/+0
| | | | | | | This was experimentally introduced in 5.18, and no issues were raised, except that it got us to thinking and spurred us to stop allowing $^X, where 'X' is a non-printable control character, and that change caused some issues.
* Add \b{sb}Karl Williamson2015-02-191-0/+2
|
* Add qr/\b{wb}/Karl Williamson2015-02-191-0/+2
|
* Add qr/\b{gcb}/Karl Williamson2015-02-191-1/+2
| | | | | | | | | | | A function implements seeing if the space between any two characters is a grapheme cluster break. Afer I wrote this, I realized that an array lookup might be a better implementation, but the deadline for v5.22 was too close to change it. I did see that my gcc optimized it down to an array lookup. This makes the implementation of \X go from being complicated to trivial.
* Release prep - Update version/copyright information.Matthew Horsfall2015-01-201-1/+1
|
* perl.c: silence compiler warning:David Mitchell2015-01-121-1/+1
| | | | | perl.c:3629:75: warning: value computed is not used [-Wunused-value] gv_SVadd(PL_errgv);
* Don't raise 'poorly supported' locale warning unnecessarilyKarl Williamson2014-12-291-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 8c6180a91de91a1194f427fc639694f43a903a78 added a warning message for when Perl determines that the program's underlying locale just switched into is poorly supported. At the time it was thought that this would be an extremely rare occurrence. However, a bug in HP-UX - B.11.00/64 causes this message to be raised for the "C" locale. A workaround was done that silenced those. However, before it got fixed, this message would occur gobs of times executing the test suite. It was raised even if the script is not locale-aware, so that the underlying locale was completely irrelevant. There is a good prospect that someone using an older Asian locale as their default would get this message inappropriately, even if they don't use locales, or switch to a supported one before using them. This commit causes the message to be raised only if it actually is relevant. When not in the scope of 'use locale', the message is stored, not raised. Upon the first locale-dependent operation within a bad locale, the saved message is raised, and the storage cleared. I was able to do this without adding extra branching to the main-line non-locale execution code. This was done by adding regnodes which get jumped to by switch statements, and refactoring some existing C tests so they exclude non-locale right off the bat. These changes would have been necessary for another locale warning that I previously agreed to implement, and which is coming a few commits from now. I do not know of any way to add tests in the test suite for this. It is in fact rare for modern locales to have these issues. The way I tested this was to temporarily change the C code so that all locales are viewed as defective, and manually note that the warnings came out where expected, and only where expected. I chose not to try to output this warning on any POSIX functions called. I believe that all that are affected are deprecated or scheduled to be deprecated anyway. And POSIX is closer to the hardware of the machine. For convenience, I also don't output the message for some zero-length pattern matches. If something is going to be matched, the message will likely very soon be raised anyway.
* -Dp does work on EBCDIC.Karl Williamson2014-12-091-5/+0
|
* Restore profile dump under PERL_DESTRUCT_LEVELFather Chrysostomos2014-12-041-1/+2
| | | | | | | | | | | | | | | | | | | | | | $ ./perl -Ilib -DP -e0 filter_add func 1000dfa20 () filter_read 0: via function 7f8fd302fe88 () filter_read 0: via function 7f8fd302fe88 () filter_del func 1000dfa20 EXECUTING... 1 nextstate 1 enter 1 leave $ PERL_DESTRUCT_LEVEL=2 ./perl -Ilib -DP -e0 filter_add func 107b81a20 () filter_read 0: via function 7f81e882fea0 () filter_read 0: via function 7f81e882fea0 () filter_del func 107b81a20 EXECUTING... The list of ops executed is omitted if I set PERL_DESTRUCT_LEVEL=2. This was probably broken by bf9cdc68d2.
* make more use of NOT_REACHEDLukas Mai2014-11-291-4/+4
| | | | In particular, remove all instances of 'assert(0);'.
* make debugging easier in memory allocator code in perl.c and util.cDaniel Dragan2014-11-151-2/+5
| | | | | | | | | | -show intermediate values to make C debugging easier -Perl_safesysfree overwrote var where with a different value, this caused alot of confusion for me of trying to hunt for a pointer from a stack trace with conditional breakpoints, so don't change var where in an unoptimized build -in Perl_safesysrealloc and Perl_safesysmalloc provide 1 exit path, so the returned value is easily seen and BPed on unoptimized builds
* add xs_handshake APIDaniel Dragan2014-11-071-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This API elevates the amount of ABI compatibility protection between XS modules and the interp. It also makes each boot XSUB smaller in machine code by removing function calls and factoring out code into the new Perl_xs_handshake and Perl_xs_epilog functions. sv.c : - revise padlist duping code to reduce code bloat/asserts on DEBUGGING ext/DynaLoader/dlutils.c : - disable version checking so interp startup is faster, ABI mismatches are impossible because DynaLoader is never available as a shared library ext/XS-APItest/XSUB-redefined-macros.xs : - "" means dont check the version, so switch to " " to make the test in xsub_h.t pass, see ML thread "XS_APIVERSION_BOOTCHECK and XS_VERSION is CPP defined but "", mow what?" ext/re/re.xs : - disable API version checking until #123007 is resolved ParseXS/Utilities.pm : 109-standard_XS_defs.t : - remove context from S_croak_xs_usage similar to core commit cb077ed296 . CvGV doesn't need a context until 5.21.4 and commit ae77754ae2 and by then core's croak_xs_uage API has been long available and this backport doesn't need to account for newer perls - fix test where lack of having PERL_IMPLICIT_CONTEXT caused it to fail
* remove obsolete PL_apiversionDaniel Dragan2014-11-071-2/+0
| | | | | Commit 0e42d607f5 made PL_apiversion unused. Remove it to save memory in interp struct.
* free up CvPADLIST slot for XSUBs for future useDaniel Dragan2014-10-311-1/+1
| | | | | | | | | | | | | | | | | | | CvRESERVED is a placeholder, it will be replaced with a sentinal value from future revised BOOTCHECK API. CvPADLIST_set was helpful during development of this patch, so keep it around for now. PoisonPADLIST's magic value is from PERL_POISON 0xEF pattern. Some PoisonPADLIST locations will get code from future BOOTCHECK API. Make padlist_dup a NN function to avoid overhead of calling it for XSUBs during closing. Perl_cv_undef_flags's else if (CvISXSUB(&cvbody)) is to avoid whitespace changes. Filed as perl [#123059].
* [perl #122445] use magic on $DB::single etc to avoid overload issuesTony Cook2014-10-091-1/+17
| | | | | | | | | This prevents perl recursing infinitely when an overloaded object is assigned to $DB::single, $DB::trace or $DB::signal This is done by referencing their values as IVs instead of as SVs in dbstate, and by adding magic to those variables so that assignments to the scalars update the PL_DBcontrol array.
* Make OP_METHOD* to be of new class METHOPsyber2014-10-031-14/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce a new opcode class, METHOP, which will hold class/method related info needed at runtime to improve performance of class/object method calls, then change OP_METHOD and OP_METHOD_NAMED from being UNOP/SVOP to being METHOP. Note that because OP_METHOD is a UNOP with an op_first, while OP_METHOD_NAMED is an SVOP, the first field of the METHOP structure is a union holding either op_first or op_sv. This was seen as less messy than having to introduce two new op classes. The new op class's character is '.' Nothing has changed in functionality and/or performance by this commit. It just introduces new structure which will be extended with extra fields and used in later commits. Added METHOP constructors: - newMETHOP() for method ops with dynamic method names. The only optype for this op is OP_METHOD. - newMETHOP_named() for method ops with constant method names. Optypes for this op are: OP_METHOD_NAMED (currently) and (later) OP_METHOD_SUPER, OP_METHOD_REDIR, OP_METHOD_NEXT, OP_METHOD_NEXTCAN, OP_METHOD_MAYBENEXT (This commit includes fixups by davem)
* perl.c: fix small bug on Android from commit 9054c81Alexandre (Midnite) Jousset2014-09-041-2/+2
| | | | | | | Commit b33b7ab made PERL_LIB absolute when cross-compiling on Android. Commit 9054c81 added incompatibility with this. Now, only add "./" to run buildcustomize.pl when miniperl is running with -T.
* Allow for changing size of bracketed regex char classKarl Williamson2014-09-031-0/+2
| | | | | | | | This commit allows Perl to be compiled with a bitmap size that is larger than 256. This bitmap is used to directly look up whether a character matches or not, without having to do a binary search or hash lookup. It might improve the performance for some installations that have a lot of use of scripts that are above the Latin1 range.
* perl.c: Improve buildcustomize error messageFather Chrysostomos2014-08-311-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | buildcustomize.pl was being loaded with generated code that died if ‘lib/buildcustomize.pl’ existed but do-file failed. $@ was used as the error message. If the file does not exist (do-file searching @INC), then $@ is empty and the error is in $!. Before 9054c817, this is what we would get: $ ./miniperl -T -Ilib -e0 Died. BEGIN failed--compilation aborted. I fixed that in 9054c817 so there would be no error (by adding an ini- tial ‘./’ to the path.) That message was rather baffling. It would have been easier to track down the cause if I had seen something like this: $ ./miniperl -T -Ilib -e0 lib/buildcustomize.pl: No such file or directory. BEGIN failed--compilation aborted. This commit changes the generated code to output $! like that if $@ is empty, in case a similar bug occurs again.
* Get ‘./miniperl -Ilib -T’ workingFather Chrysostomos2014-08-311-1/+3
| | | | | | | | | | | | | | | | | | | | | If the first directory included via -I contains buildcustomize.pl, then miniperl will try to load it at startup. This allows the build process to access all the necessary directories, because buildcustomize.pl fills in @INC. This was not working under taint mode, making it a pain for me to diagnose tainting bugs with miniperl (which builds faster than perl proper, obviously). It failed because buildcustomize.pl is loaded with generated code that does ‘do "lib/buildcustomize.pl"’ (where ‘lib’ is taken from -Ilib), but do-file searches @INC, which does not include the current direc- tory under taint mode. The easiest solution here is to add ‘./’ to the beginning of the path. It is unlikely that anyone is using miniperl -I/... (with an absolute path), and miniperl is only supposed to be used for building or devel- oping perl, anyway.
* Make eval_pv documentation more preciseTadeusz Sośnierz2014-08-241-1/+1
|
* Add and use macros for case-insensitive comparisonKarl Williamson2014-08-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | This adds to handy.h isALPHA_FOLD_EQ(c1,c2) which efficiently tests if c1 and c2 are the same character, case-insensitively. For example isALPHA_FOLD_EQ(c, 's') returns true if and only if <c> is 's' or 'S'. isALPHA_FOLD_NE() is also added by this commit. At least one of c1 and c2 must be known to be in [A-Za-z] or this macro doesn't work properly. (There is an assert for this in the macro in DEBUGGING builds). That is why the name includes "ALPHA", so you won't forget when using it. This functionality has been in regcomp.c for a while, under a different name. I had thought that the only reason to make it more generally available was potential speed gain, but recent gcc versions optimize to the same code, so I thought there wasn't any point to doing so. But I now think that using this makes things easier to read (and certainly shorter to type in). Once you grok what this macro does, it simplifies what you have to keep in your mind when reading logical expressions with multiple operands. That something can be either upper or lower case can be a distraction to understanding the larger point of the expression.
* Use grok_atou instead of atoi.Jarkko Hietaniemi2014-07-221-8/+16
| | | | | Remaining atoi() uses include at least: ext/DynaLoader/dl_aix.xs, os2/os2.c, vms/vms.c
* Remove or downgrade unnecessary dVAR.Jarkko Hietaniemi2014-06-251-27/+5
| | | | | | | | You need to configure with g++ *and* -Accflags=-DPERL_GLOBAL_STRUCT or -Accflags=-DPERL_GLOBAL_STRUCT_PRIVATE to see any difference. (g++ does not do the "post-annotation" form of "unused".) The version code has some of these issues, reported upstream.
* PERL_UNUSED_CONTEXT -> remove interp context where possibleDaniel Dragan2014-06-241-2/+2
| | | | | | | | | | | | | | | | | | | | | Removing context params will save machine code in the callers of these functions, and 1 ptr of stack space. Some of these funcs are heavily used as mg_find*. The contexts can always be readded in the future the same way they were removed. This patch inspired by commit dc3bf40570. Also remove PERL_UNUSED_CONTEXT when its not needed. See removal candidate rejection rational in [perl #122106]. -Perl_hv_backreferences_p uses context in S_hv_auxinit commit 96a5add60f was wrong -Perl_whichsig_sv and Perl_whichsig_pv wrongly used PERL_UNUSED_CONTEXT from inception in commit 84c7b88cca -in authors opinion cast_* shouldn't be public API, no CPAN grep usage, can't be static and/or inline optimized since it is exported -Perl_my_unexec move to block where it is needed, make Win32 block, context free, for inlining likelyhood, private api and only 2 callers in core -Perl_my_dirfd make all blocks context free, then change proto -Perl_bytes_cmp_utf8 wrongly used PERL_UNUSED_CONTEXT from inception in commit fed3ba5d6b
* Revert "/* NOTREACHED */ belongs *before* the unreachable."Jarkko Hietaniemi2014-06-191-8/+4
| | | | | | This reverts commit 148f39b7de6eae9ddd59e0b0aff691d6abea7aca. (Still needs more work, but wanted to see how well this passed with Jenkins.)
* /* NOTREACHED */ belongs *before* the unreachable.Jarkko Hietaniemi2014-06-191-4/+8
| | | | | | Definitely not *after* it. It marks the start of the unreachable, not the first unrechable line. And if they are in that order, it looks better to linebreak after the lint hint.
* Remove MAD.Jarkko Hietaniemi2014-06-131-42/+1
| | | | | | MAD = Misc Attribute Decoration; unmaintained attempt at preserving the Perl parse tree more faithfully so that automatic conversion to Perl 6 would have been easier.
* Adding missing SVfARG() invocationsBrian Fraser2014-06-131-5/+5
| | | | This silences a chunk of warnings under -Wformat
* Removed NeXT supportBrian Fraser2014-06-111-5/+0
|
* Keep LC_NUMERIC in C locale, except for brief periodsKarl Williamson2014-06-051-7/+0
| | | | | | | This is for XS modules, so they don't have to worry about the radix being a non-dot. When the locale needs to be in the underlying one, the operation should be wrapped using macros for the purpose. That API may change as we gain experience in 5.21, so I'm not including it now.
* Unify the "fall-through" lint annotation.Jarkko Hietaniemi2014-05-291-8/+8
| | | | | | | Used by linters (static checkers), and also good for human readers. Even though "FALL THROUGH" seems to be the most common, e.g BSD lint manual only knows "FALLTHROUGH" (or "FALLTHRU").
* fcntl receiving -1 from fileno, fcntl failing.Jarkko Hietaniemi2014-05-291-10/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (Also very few spots of negative numgroups for getgroups(), and fgetc() return, but almost all checking is for fcntl.) (merged fix for perl #121743 and perl #121745: hopefully picked up all the fixes-to-fixes from the ticket...) Fix for Coverity perl5 CIDs 28990..29003,29005..29011,29013, 45354,45363,49926: Argument cannot be negative (NEGATIVE_RETURNS) fd is passed to a parameter that cannot be negative. and CIDs 29004, 29012: Argument cannot be negative (NEGATIVE_RETURNS) num_groups is passed to a parameter that cannot be negative and because of CIDs 29005 and 29006 also CID 28924. In the first set of issues a fd is retrieved from PerlIO_fileno, and that is then used in places like fstat(), fchown(), dup(), etc., without checking whether the fd is valid (>=0). In the second set of issues a potentially negative number is potentially passed to getgroups(). The CIDs 29005 and 29006 were a bit messy: fixing them needed also resolving CID 28924 where the return value of fstat() was ignored, and for completeness adding two croak calls (with perldiag updates): a bit of a waste since it's suidperl code.
* Fix for Coverity perl5 CID 29068: Insecure temporary file (SECURE_TEMP) ↵Jarkko Hietaniemi2014-05-281-0/+2
| | | | | | | | | | secure_temp: Calling mkstemp() without securely setting umask first. The umask used for mkstemp should be secure, but umask 0600 has been the required umask only since POSIX.1-2008. In glibc 2.06 and earlier the default was 0666, which is not secure. And no explicit knowledge of how well non-glibc platforms implement mkstemp. Better err on the side security, so set the umask temporarily to 0600, and then restore it.
* Use the C_ARRAY_LENGTH.Jarkko Hietaniemi2014-05-281-1/+1
| | | | | | | | | | | | Use the C_ARRAY_LENGTH instead of sizeof(c_array)/sizeof(c_array[0]) or sizeof(c_array)/sizeof(type_of_element_in_c_array), and C_ARRAY_END for c_array + C_ARRAY_LENGTH(c_array). While doing this found potential off-by-one error in sv.c:Perl_sv_magic: how > C_ARRAY_LENGTH(PL_magic_data) should probably have been how >= C_ARRAY_LENGTH(PL_magic_data) No tests fail, but this seems to be more of an internal sanity check.
* For ptr masking use PTRSIZE-1, not nested conditional statement.Jarkko Hietaniemi2014-05-281-2/+1
|
* PATCH: [perl 121317] Gconvert() obeys LC_NUMERIC without "use locale"Karl Williamson2014-04-011-0/+7
| | | | | | | | | | | | | | | | | | This reverts part of bc8ec7cc020d0562094a551b280fd3f32bf5eb04. leaving LC_NUMERIC set to the C locale at start-up. This allows the tests for quite a few XS modules to pass, as they (and likely the modules themselves) are expecting a dot as the decimal point character. However,such modules remain vulnerable to explicit calls to setlocale() by the Perl code or other modules, See the ticket's discussion for ideas on how to fix this better in 5.21 going forward. I did not add tests because this fix only affects XS code that is not in the Perl API, and we don't have any infrastructure for testing that. Building such infrastructure seems to me to be too much for the code freeze situation we are in, and all this is planned to change very early in v5.21 anyway.
* Change av_len calls to av_tindex for clarityKarl Williamson2014-02-201-2/+2
| | | | | | av_tindex is a more clearly named synonym for av_len, available starting in v5.18. This changes the core uses to it, including modules in /ext, which are not dual-lifed.
* New bincompat optionsH.Merijn Brand2014-02-191-0/+3
|
* Fix the prototypes of some functions without contextBrian Fraser2014-02-051-1/+1
| | | | Their prototypes are (void), but the implementation was ()
* Avoid compiler warnings by consistently using #ifdef instead of plain #ifBrian Fraser2014-02-051-11/+11
|
* Add -DL option to trace setlocale callsKarl Williamson2014-02-031-1/+2
| | | | This will help field debugging of locale issues.