develooper Front page | perl.perl5.porters | Postings from June 2015

[perl #125510] Wrongly calculated $[-value with big numbers

Thread Next
Norman Koch
June 29, 2015 14:15
[perl #125510] Wrongly calculated $[-value with big numbers
Message ID:
# New Ticket Created by  Norman Koch 
# Please include the string:  [perl #125510]
# in the subject line of all future correspondence about this issue. 
# <URL: >

This is a bug report for perl from,
generated with the help of perlbug 1.39 running under perl 5.14.2.

[Please describe your issue here]

I'm not even sure if this is worth a bug report, since perl tells me
this feature is deprecated,
but maybe even deprecated features get bugfixes and there might be other
situations where this way
of calculating the numbers is used that might be worth fixing.

I was playing around with the $[-parameter for setting the
index-start-number of arrays. I tried to
see what happens if you input really big numbers.

Up to 2147483647 it all works fine. But with (2^32 / 2 = ) 2147483648,
there's a buffer overflow.

$[ = 2147483648;
my @array = ("A");
print $#array; print "\n";

gives me:

Use of assignment to $[ is deprecated at line 2.

So, the array-counter seems to be a signed integer having an overflow
here, right?

I tried investigating further. $[ = (2 ** 32) e.g. did nothing at all.
It's ok I guess to set it
to zero when the number is too high. But there should be a warning.

Weirdly, when you set it to a close-to-2147483647-number and then just
add some elements to the array,
it works fine and the number gets as high as one would expect it.

Also, every really big number, e.g. $[ = 10 ** 100000, just sets the
variable to -1. Interestingly,
using "bignum" takes a lot of time with those numbers. So it's probably
calculating them correctly,
but then ends up not using them and replacing them with -1, except for
really big negative numbers,
where it goes back to zero again. For me, this is unexpected and
unwanted behaviour.

But then, please forgive me if this is not worth a bug-report. I know
this feature shouldn't be used and
it is deprecated. But I thought that the methods used there might be
used in other places that needed
fixing then.  Let's see what you perl-experts say.

[Please do not change anything below this line]
Site configuration information for perl 5.14.2:

Configured by Debian Project at Tue Sep 30 09:49:44 UTC 2014.

Summary of my perl5 (revision 5 version 14 subversion 2) configuration:
    osname=linux, osvers=3.2.0-4-amd64,
    uname='linux binet 3.2.0-4-amd64 #1 smp debian 3.2.60-1+deb7u3
x86_64 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector --param=ssp-buffer-size=4
-Wformat -Werror=format-security -Dldflags= -Wl,-z,relro
-Dlddlflags=-shared -Wl,-z,relro -Dcccdlflags=-fPIC
-Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.14
-Darchlib=/usr/lib/perl/5.14 -Dvendorprefix=/usr
-Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5
-Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.14.2
-Dsitearch=/usr/local/lib/perl/5.14.2 -Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
-Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1
-Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm
-Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -des'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
-fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include
    optimize='-O2 -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector
-fno-strict-aliasing -pipe -I/usr/local/include'
    ccversion='', gccversion='4.7.2', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib
/usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=, so=so, useshrplib=true,
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib

Locally applied patches:
    DEBPKG:debian/arm_thread_stress_timeout - Raise the timeout of
ext/threads/shared/t/stress.t to accommodate slower build hosts
    DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS
default for modules installed from CPAN.
    DEBPKG:debian/db_file_ver - Remove
overly restrictive DB_File version check.
    DEBPKG:debian/doc_info - Replace generic man(1) instructions with
Debian-specific information.
    DEBPKG:debian/enc2xs_inc - Tweak
enc2xs to follow symlinks and ignore missing @INC directories.
    DEBPKG:debian/errno_ver - Remove Errno
version check due to upgrade problems with long-running processes.
    DEBPKG:debian/libperl_embed_doc - Note
that libperl-dev package is required for embedded linking
    DEBPKG:fixes/respect_umask - Respect umask during installation
    DEBPKG:debian/writable_site_dirs - Set umask approproately for site
install directories
    DEBPKG:debian/extutils_set_libperl_path - EU:MM: Set location of
libperl.a to /usr/lib
    DEBPKG:debian/no_packlist_perllocal - Don't install .packlist or
perllocal.pod for perl or vendor
    DEBPKG:debian/prefix_changes - Fiddle with *PREFIX and variables
written to the makefile
    DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the
binary targets.
    DEBPKG:debian/instmodsh_doc - Debian policy doesn't install
.packlist files for core or vendor.
    DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as
per Debian policy.
    DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to
/etc/perl/Net as /usr may not be writable.
    DEBPKG:debian/m68k_thread_stress - Disable some threads tests on m68k for now
due to missing TLS.
    DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian
    DEBPKG:debian/module_build_man_extensions - Adjust Module::Build manual page
extensions for the Debian Perl policy
    DEBPKG:debian/prune_libs - Prune the
list of libraries wanted to what we actually need.
    DEBPKG:fixes/net_smtp_docs - [ #36038] Document the Net::SMTP 'Port' option
    DEBPKG:debian/perlivp - Make perlivp
skip include directories in /usr/local
    DEBPKG:debian/cpanplus_definstalldirs - Configure CPANPLUS to use the site
directories by default.
    DEBPKG:debian/cpanplus_config_path - Save local versions of
CPANPLUS::Config::System into /etc/perl.
    DEBPKG:debian/deprecate-with-apt -
Point users to Debian packages of deprecated core modules
    DEBPKG:fixes/hurd-ccflags - [a190e64]
[perl #92244] Make hints/ append to $ccflags rather than
overriding them
    DEBPKG:debian/squelch-locale-warnings - Squelch locale warnings in Debian package
maintainer scripts
    DEBPKG:debian/skip-upstream-git-tests - Skip tests specific to the
upstream Git repository
    DEBPKG:fixes/extutils-cbuilder-cflags - [011e8fb] [perl #89478] Append CFLAGS and LDFLAGS to
their counterparts in EU::CBuilder
    DEBPKG:fixes/module-build-home-directory - [ #67893] Fix failing tilde
test when run under a UID without a passwd entry
    DEBPKG:debian/patchlevel - List
packaged patches for 5.14.2-21+deb7u2 in patchlevel.h
    DEBPKG:fixes/h2ph-multiarch - [e7ec705] [perl #90122] Make h2ph correctly search
gcc include directories
    DEBPKG:fixes/index-tainting - [3b36395] [perl #64804] RT 64804: tainting with
index() of a constant
    DEBPKG:fixes/document_makemaker_ccflags - [ #68613] Document that CCFLAGS
should include $Config{ccflags}
    DEBPKG:fixes/sys-syslog-socket-timeout-kfreebsd.patch - [ #69997] Use a socket timeout
on GNU/kFreeBSD to catch ICMP port unreachable messages
    DEBPKG:fixes/hurd-hints - Improve
general GNU hints, needed for GNU/Hurd.
    DEBPKG:fixes/pod_fixes - [7698aed] Fix
typos in several pod/perl*.pod files
    DEBPKG:debian/find_html2text -
Configure CPAN::Distribution with correct name of html2text
    DEBPKG:fixes/digest_eval_hole - Close
the eval "require $module" security hole in Digest->new($algorithm)
    DEBPKG:fixes/hurd-ndbm - [f0d0a20] [perl #102680] Add GNU/Hurd hints for NDBM_File
    DEBPKG:fixes/sysconf.t-posix - [8040185] [perl #102888] Fix hang in ext/POSIX/t/sysconf.t on GNU/Hurd
    DEBPKG:fixes/hurd-largefile - [1fda587] [perl #103014] enable LFS on GNU/Hurd
    DEBPKG:debian/hurd_test_todo_syslog -
Disable failing GNU/Hurd tests in cpan/Sys-Syslog/t/syslog.t
    DEBPKG:fixes/hurd_skip_itimer_virtual - [ #72754] Skip interval timer tests in Time::HiRes
on GNU/Hurd
    DEBPKG:debian/hurd_test_skip_sigdispatch - Disable failing GNU/Hurd tests
    DEBPKG:debian/hurd_test_skip_stack -
Disable failing GNU/Hurd tests dist/threads/t/stack.t
    DEBPKG:debian/hurd_test_skip_pipe -
Disable failing GNU/Hurd tests io/pipe.t
    DEBPKG:debian/hurd_test_skip_io_pipe -
Disable failing GNU/Hurd tests dist/IO/t/io_pipe.t
    DEBPKG:fixes/manpage_name_CPAN -
[ #73396] cpan/CPAN: add NAME headings in modules with POD
    DEBPKG:fixes/manpage_name_CPANPLUS -
[ #73398] cpan/CPANPLUS: add NAME headings in modules with POD
    DEBPKG:fixes/manpage_name_Test-Harness - [ #73399] cpan/Test-Harness:
add NAME headings in modules with POD
    DEBPKG:fixes/manpage_name_Term-UI -
[ #73400] cpan/Term-UI: add NAME headings in modules with POD
    DEBPKG:fixes/podlators_ae_ligature_fallback - Fix the ASCII fallback string for AE
    DEBPKG:fixes/fsf_postal_address - [de89470] Update references to the
FSF's postal address
    DEBPKG:fixes/cpan_module_pod_fixes - [perl #106870] [
#73447] [ #73446] Fix POD formatting in Term-Cap and Pod-Parser
    DEBPKG:fixes/cgi_no_shellwords_pl - Use Text::ParseWords instead of
    DEBPKG:fixes/path_max_fallback - [perl #109262] Don't use _POSIX_PATH_MAX as a fallback
    DEBPKG:debian/makemaker-pasthru -
[ #28632] Make EU::MM pass LD through to recursive
Makefile.PL invocations
    DEBPKG:fixes/propagate_tainted_errors.patch - [perl #111654]
properly propagate tainted errors
    DEBPKG:debian/perl5db-x-terminal-emulator.patch - Invoke x-terminal-emulator rather than
xterm in
    DEBPKG:fixes/socket_cache_propagate - [
#61577] [perl #112736] sockdomain and socktype undef on newly accepted
    DEBPKG:fixes/ipc_open3 - [perl #114454] IPC::Open3::open3(..., '-') broken
    DEBPKG:fixes/string_repeat_overrun -
[b675304] avoid calling memset with a negative count
    DEBPKG:debian/cpan-missing-site-dirs -
Fix CPAN::FirstTime defaults with nonexisting site dirs if a parent is
    DEBPKG:fixes/kfreebsd-overrides -
[perl #115324] [7dc6565] Remove unnecessary overrides in gnukfreebsd and
gnuknetbsd hints.
    DEBPKG:fixes/tainted-smartmatch - [be88a5c] [perl #93590] $tainted ~~ [...] failing
    DEBPKG:fixes/regexp-matching-starter - [6e634c5] [perl #101710] Regression with /i, latin1
    DEBPKG:fixes/regexp-matching-fold - [399fb9c] regexec.c: Fix "\x{FB01}\x{FB00}" =~ /ff/i
    DEBPKG:fixes/regexp-matching-opposite-case - [dc91d5a] [perl #101970] /[[:lower:]]/i matches
upper case
    DEBPKG:fixes/reading-glob-copy-handle - [fd1564b] [perl #92258] <$fh> hangs on a glob copy
    DEBPKG:fixes/smartmatch-rhs-precedence - [011be0b] Enforce Any ~~ Object smartmatch
    DEBPKG:fixes/perlcheat-update -
[ab0ae0a] Update PerlCheat to 5.14
    DEBPKG:fixes/cgi-cr-escaping - CR
escaping for P3P and Set-Cookie headers
    DEBPKG:fixes/maketext-code-execution - [1735f6f] Fix misparsing of maketext strings.
    DEBPKG:fixes/storable-security-warning - [664f237] add a note about security concerns in Storable
    DEBPKG:fixes/digest-sha-doublefree - [ #82655] [a8c6ff7] Fix a double-free bug in Digest::SHA
    DEBPKG:fixes/64bitint-signedness-wraparound - [94e529c] Avoid wraparound when casting
unsigned size_t to signed ssize_t.
    DEBPKG:fixes/stdin-sigchld - [perl
#116621] [be48bbe] add a couple missing LEAVEs in perlio_async_run()
    DEBPKG:fixes/hsplit-rehash - [d59e31f]
Prevent premature hsplit() calls, and only trigger REHASH after hsplit()
    DEBPKG:fixes/encode-memleak -
[5814803] Encode: Fixed a memory leak that occurred in the UTF-8 encoding.
    DEBPKG:fixes/threads_shared_elements_crash - [perl #119089] threads::shared should not crash if shared
elements outlive their aggregate.
    DEBPKG:fixes/perlbug-patchlist - [3541c11] [perl #118433] Make perlbug look up the
list of local patches at run time
    DEBPKG:fixes/digest_sha_double_free - [ee8c6f4] [ #86295] maint-5.18: Digest-SHA crash fix in 5.85
    DEBPKG:fixes/pl_eval_start_use_after_free - [eae139f] [perl #115992]
PL_eval_start use-after-free
    DEBPKG:fixes/regcomp_fix_segv - [ebb390a] [perl #115994] fix segv in
    DEBPKG:fixes/list_util_off_by_two - [623a911] fix off-by-two error
in List::Util
    DEBPKG:fixes/sdbm_off_by_one - [7f5f08b] [perl #111586] sdbm.c: fix
off-by-one access to global ".dir"
    DEBPKG:fixes/socket_unpack_sockaddr_un_heap_buffer_overflow -
[e508642] [perl #111594] Socket::unpack_sockaddr_un heap-buffer-overflow
    DEBPKG:fixes/data_dump_infinite_recurse - [19be3be] don't recurse
infinitely in Data::Dumper

@INC for perl 5.14.2:

Environment for perl 5.14.2:
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PERL_BADLANG (unset)
    PERL_MB_OPT=--install_base /home/norman/perl5

Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About