Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.93k stars 552 forks source link

When using external c-functions through perlxs, copies of strings (copy-on-write) are not properly produced #14877

Closed p5pRT closed 9 years ago

p5pRT commented 9 years ago

Migrated from rt.perl.org#125925 (status was 'rejected')

Searchable as RT125925$

p5pRT commented 9 years ago

From Emilio.PastorMira@utimaco.com

Dear Sir or Madam\,

our company uses Perl daily for a variety of tasks. We found what we strongly believe is a bug and we would like to contribute to the development of Perl.

After doing a simple copy of a string\, if an external c-function is used to modify the copy\, the function will change the original as well. Apparently the "copy-on-write" routine does not work perfectly for external c-functions in the newest versions of Perl.

This happens in Perl 5.20 and 5.22 but works properly under Perl 5.14. We use mainly Perl 5.14 and we found the bug as we upgrade to newer (Debian) Systems.

On the attachment we provide a tar. Calling within the unpacked folder " make test" should compile a C shared library\, produce the perlxs shared library and call the little example that should show the bug we want to report.

We provide as well dumps of "perlbug -d" for both a Perl version without the bug (5.14) and for a Perl version with the bug (5.22).

Finally we want to thank anybody involve into the development of Perl. Our work is much easier thanks to them.

If possible we would like to receive some feedback about this report. Thanks very much. Cheers Emilio Pastor Mira

Emilio Pastor Mira Development Engineer

Utimaco IS GmbH Germanusstr. 4 52080 Aachen phone +49-241-1696-250 Fax. +49-241-1696-199 e-mail​: emilio.pastormira@​utimaco.com\mailto&#8203;:emilio\.pastormira@&#8203;utimaco\.com www.utimaco.com\<http​://www.utimaco.com/>

________________________________

Utimaco IS GmbH

Seat​: Aachen - Registergericht Aachen HRB 18922 VAT ID No.​: DE 815 496 496 Managementboard​: Malte Pollmann (Chairman) CEO\, Dr. Frank J. Nellissen CFO

Wichtiger Hinweis​: Diese E-Mail kann Betriebs- und Gesch?ftsgeheimnisse oder sonstige vertrauliche Informationen enthalten. Sollten Sie diese E-Mail irrt?mlich erhalten haben\, ist Ihnen eine Kenntnisnahme des Inhalts\, eine Vervielf?ltigung oder Weitergabe der E-Mail ausdr?cklich untersagt. Bitte benachrichtigen Sie uns und vernichten Sie die E-Mail. Der Absender hat alle erdenklichen Vorsichtsma?nahmen getroffen\, dass die Anlagen dieser E-Mail frei von Computerviren o. ?. sind. Gleichwohl schlie?en wir die Haftung f?r jeden Schaden aus\, der durch Computerviren o. ?. verursacht wurde\, soweit wir nicht vors?tzlich oder grob fahrl?ssig gehandelt haben. Wir raten Ihnen\, dass Sie in jedem Fall Ihre eigene Virenpr?fung vornehmen\, bevor Sie die Anlagen ?ffnen. Vielen Dank.

Important Notice​: The information contained in this email message may be confidential information. If you are not the intended recipient\, any use\, interference with\, disclosure or copying of this material is unauthorised and prohibited. Please inform us immediately and destroy the email. We have taken every reasonable precaution to ensure that any attachment to this email has been swept for viruses. However\, we cannot accept liability for any damage sustained as a result of software viruses and would advise that you carry out your own virus checks before opening any attachment. Thank you for your cooperation.

p5pRT commented 9 years ago

From Emilio.PastorMira@utimaco.com

PerlBug.tar.gz

p5pRT commented 9 years ago

From Emilio.PastorMira@utimaco.com


Flags​:   category=core   severity=low


Site configuration information for perl 5.22.0​:

Configured by epa at Thu Aug 27 16​:05​:12 CEST 2015.

Summary of my perl5 (revision 5 version 22 subversion 0) configuration​:  
  Platform​:   osname=linux\, osvers=3.2.0-4-amd64\, archname=x86_64-linux   uname='linux lx-epa 3.2.0-4-amd64 #1 smp debian 3.2.51-1 x86_64 gnulinux '   config_args='-des -Dprefix=/home/epa/WORK/perlbug/localperl/'   hint=recommended\, useposix=true\, d_sigaction=define   useithreads=undef\, usemultiplicity=undef   use64bitint=define\, use64bitall=define\, uselongdouble=undef   usemymalloc=n\, bincompat5005=undef   Compiler​:   cc='cc'\, ccflags ='-fwrapv -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2'\,   optimize='-O2'\,   cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'   ccversion=''\, gccversion='4.7.2'\, gccosandvers=''   intsize=4\, longsize=8\, ptrsize=8\, doublesize=8\, byteorder=12345678\, doublekind=3   d_longlong=define\, longlongsize=8\, d_longdbl=define\, longdblsize=16\, longdblkind=3   ivtype='long'\, ivsize=8\, nvtype='double'\, nvsize=8\, Off_t='off_t'\, lseeksize=8   alignbytes=8\, prototype=define   Linker and Libraries​:   ld='cc'\, ldflags =' -fstack-protector -L/usr/local/lib'   libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib   libs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc   perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc   libc=libc-2.13.so\, so=so\, useshrplib=false\, libperl=libperl.a   gnulibc_version='2.13'   Dynamic Linking​:   dlsrc=dl_dlopen.xs\, dlext=so\, d_dlsymun=undef\, ccdlflags='-Wl\,-E'   cccdlflags='-fPIC'\, lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector'


@​INC for perl 5.22.0​:   /home/epa/WORK/perlbug/localperl/lib/site_perl/5.22.0/x86_64-linux   /home/epa/WORK/perlbug/localperl/lib/site_perl/5.22.0   /home/epa/WORK/perlbug/localperl/lib/5.22.0/x86_64-linux   /home/epa/WORK/perlbug/localperl/lib/5.22.0   .


Environment for perl 5.22.0​:   HOME=/home/epa   LANG=en_US.utf8   LANGUAGE (unset)   LD_LIBRARY_PATH (unset)   LOGDIR (unset)   PATH=/home/epa/WORK/perlbug/localperl/bin/​:/usr/local/bin​:/usr/bin​:/bin​:/usr/local/games​:/usr/games​:/fs/bin/Linux-x86_64   PERL_BADLANG (unset)   SHELL=/bin/bash

p5pRT commented 9 years ago

From Emilio.PastorMira@utimaco.com


Flags​:   category=core   severity=low


Site configuration information for perl 5.14.2​:

Configured by Debian Project at Mon Sep 30 03​:43​:22 UTC 2013.

Summary of my perl5 (revision 5 version 14 subversion 2) configuration​:  
  Platform​:   osname=linux\, osvers=3.2.0-4-amd64\, archname=x86_64-linux-gnu-thread-multi   uname='linux babin 3.2.0-4-amd64 #1 smp debian 3.2.46-1+deb7u1 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 -Dlibperl=libperl.so.5.14.2 -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   Compiler​:   cc='cc'\, ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'\,   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'\, lseeksize=8   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\, libperl=libperl.so.5.14.2   gnulibc_version='2.13'   Dynamic Linking​:   dlsrc=dl_dlopen.xs\, dlext=so\, d_dlsymun=undef\, ccdlflags='-Wl\,-E'   cccdlflags='-fPIC'\, lddlflags='-shared -L/usr/local/lib -fstack-protector'

Locally applied patches​:   DEBPKG​:debian/arm_thread_stress_timeout - http​://bugs.debian.org/501970 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 - http​://bugs.debian.org/340047 Remove overly restrictive DB_File version check.   DEBPKG​:debian/doc_info - Replace generic man(1) instructions with Debian-specific information.   DEBPKG​:debian/enc2xs_inc - http​://bugs.debian.org/290336 Tweak enc2xs to follow symlinks and ignore missing @​INC directories.   DEBPKG​:debian/errno_ver - http​://bugs.debian.org/343351 Remove Errno version check due to upgrade problems with long-running processes.   DEBPKG​:debian/libperl_embed_doc - http​://bugs.debian.org/186778 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 - http​://bugs.debian.org/517938 http​://bugs.debian.org/495826 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 - http​://bugs.debian.org/479460 Adjust Module​::Build manual page extensions for the Debian Perl policy   DEBPKG​:debian/prune_libs - http​://bugs.debian.org/128355 Prune the list of libraries wanted to what we actually need.   DEBPKG​:fixes/net_smtp_docs - [rt.cpan.org #36038] http​://bugs.debian.org/100195 Document the Net​::SMTP 'Port' option   DEBPKG​:debian/perlivp - http​://bugs.debian.org/510895 Make perlivp skip include directories in /usr/local   DEBPKG​:debian/cpanplus_definstalldirs - http​://bugs.debian.org/533707 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 - http​://bugs.debian.org/580034 Point users to Debian packages of deprecated core modules   DEBPKG​:fixes/hurd-ccflags - [a190e64] http​://bugs.debian.org/587901 [perl #92244] Make hints/gnu.sh append to $ccflags rather than overriding them   DEBPKG​:debian/squelch-locale-warnings - http​://bugs.debian.org/508764 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] http​://bugs.debian.org/624460 [perl #89478] Append CFLAGS and LDFLAGS to their Config.pm counterparts in EU​::CBuilder   DEBPKG​:fixes/module-build-home-directory - http​://bugs.debian.org/624850 [rt.cpan.org #67893] Fix failing tilde test when run under a UID without a passwd entry   DEBPKG​:debian/patchlevel - http​://bugs.debian.org/567489 List packaged patches for 5.14.2-21+deb7u1 in patchlevel.h   DEBPKG​:fixes/h2ph-multiarch - [e7ec705] http​://bugs.debian.org/625808 [perl #90122] Make h2ph correctly search gcc include directories   DEBPKG​:fixes/index-tainting - [3b36395] http​://bugs.debian.org/291450 [perl #64804] RT 64804​: tainting with index() of a constant   DEBPKG​:fixes/document_makemaker_ccflags - http​://bugs.debian.org/628522 [rt.cpan.org #68613] Document that CCFLAGS should include $Config{ccflags}   DEBPKG​:fixes/sys-syslog-socket-timeout-kfreebsd.patch - http​://bugs.debian.org/627821 [rt.cpan.org #69997] Use a socket timeout on GNU/kFreeBSD to catch ICMP port unreachable messages   DEBPKG​:fixes/hurd-hints - http​://bugs.debian.org/636609 Improve general GNU hints\, needed for GNU/Hurd.   DEBPKG​:fixes/pod_fixes - [7698aed] http​://bugs.debian.org/637816 Fix typos in several pod/perl*.pod files   DEBPKG​:debian/find_html2text - http​://bugs.debian.org/640479 Configure CPAN​::Distribution with correct name of html2text   DEBPKG​:fixes/digest_eval_hole - http​://bugs.debian.org/644108 Close the eval "require $module" security hole in Digest->new($algorithm)   DEBPKG​:fixes/hurd-ndbm - [f0d0a20] [perl #102680] http​://bugs.debian.org/645989 Add GNU/Hurd hints for NDBM_File   DEBPKG​:fixes/sysconf.t-posix - [8040185] [perl #102888] http​://bugs.debian.org/646016 Fix hang in ext/POSIX/t/sysconf.t on GNU/Hurd   DEBPKG​:fixes/hurd-largefile - [1fda587] [perl #103014] http​://bugs.debian.org/645790 enable LFS on GNU/Hurd   DEBPKG​:debian/hurd_test_todo_syslog - http​://bugs.debian.org/650093 Disable failing GNU/Hurd tests in cpan/Sys-Syslog/t/syslog.t   DEBPKG​:fixes/hurd_skip_itimer_virtual - [rt.cpan.org #72754] http​://bugs.debian.org/650094 Skip interval timer tests in Time​::HiRes on GNU/Hurd   DEBPKG​:debian/hurd_test_skip_sigdispatch - http​://bugs.debian.org/650188 Disable failing GNU/Hurd tests op/sigdispatch.t   DEBPKG​:debian/hurd_test_skip_stack - http​://bugs.debian.org/650175 Disable failing GNU/Hurd tests dist/threads/t/stack.t   DEBPKG​:debian/hurd_test_skip_pipe - http​://bugs.debian.org/650187 Disable failing GNU/Hurd tests io/pipe.t   DEBPKG​:debian/hurd_test_skip_io_pipe - http​://bugs.debian.org/650096 Disable failing GNU/Hurd tests dist/IO/t/io_pipe.t   DEBPKG​:fixes/manpage_name_CPAN - http​://bugs.debian.org/650448 [rt.cpan.org #73396] cpan/CPAN​: add NAME headings in modules with POD   DEBPKG​:fixes/manpage_name_CPANPLUS - http​://bugs.debian.org/650450 [rt.cpan.org #73398] cpan/CPANPLUS​: add NAME headings in modules with POD   DEBPKG​:fixes/manpage_name_Test-Harness - http​://bugs.debian.org/650451 [rt.cpan.org #73399] cpan/Test-Harness​: add NAME headings in modules with POD   DEBPKG​:fixes/manpage_name_Term-UI - http​://bugs.debian.org/650452 [rt.cpan.org #73400] cpan/Term-UI​: add NAME headings in modules with POD   DEBPKG​:fixes/podlators_ae_ligature_fallback - http​://bugs.debian.org/652851 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] [rt.cpan.org #73447] [rt.cpan.org #73446] Fix POD formatting in Term-Cap and Pod-Parser   DEBPKG​:fixes/cgi_no_shellwords_pl - Use Text​::ParseWords instead of shellwords.pl   DEBPKG​:fixes/path_max_fallback - [perl #109262] http​://bugs.debian.org/656869 Don't use _POSIX_PATH_MAX as a fallback PATH_MAX   DEBPKG​:debian/makemaker-pasthru - http​://bugs.debian.org/660195 [rt.cpan.org #28632] Make EU​::MM pass LD through to recursive Makefile.PL invocations   DEBPKG​:fixes/propagate_tainted_errors.patch - http​://bugs.debian.org/cgi-bin/bugreport.cgi?bug=663158 [perl #111654] properly propagate tainted errors   DEBPKG​:debian/perl5db-x-terminal-emulator.patch - http​://bugs.debian.org/668490 Invoke x-terminal-emulator rather than xterm in perl5db.pl   DEBPKG​:fixes/socket_cache_propagate - http​://bugs.debian.org/cgi-bin/bugreport.cgi?bug=659075 [rt.cpan.org #61577] [perl #112736] sockdomain and socktype undef on newly accepted sockets   DEBPKG​:fixes/ipc_open3 - [perl #114454] http​://bugs.debian.org/683894 IPC​::Open3​::open3(...\, '-') broken   DEBPKG​:fixes/string_repeat_overrun - http​://bugs.debian.org/689314 [b675304] avoid calling memset with a negative count   DEBPKG​:debian/cpan-missing-site-dirs - http​://bugs.debian.org/688842 Fix CPAN​::FirstTime defaults with nonexisting site dirs if a parent is writable   DEBPKG​:fixes/kfreebsd-overrides - http​://bugs.debian.org/689713 [perl #115324] [7dc6565] Remove unnecessary overrides in gnukfreebsd and gnuknetbsd hints.   DEBPKG​:fixes/tainted-smartmatch - [be88a5c] http​://bugs.debian.org/690571 [perl #93590] $tainted ~~ [...] failing   DEBPKG​:fixes/regexp-matching-starter - [6e634c5] http​://bugs.debian.org/690975 [perl #101710] Regression with /i\, latin1 chars.   DEBPKG​:fixes/regexp-matching-fold - [399fb9c] http​://bugs.debian.org/690976 regexec.c​: Fix "\x{FB01}\x{FB00}" =~ /ff/i   DEBPKG​:fixes/regexp-matching-opposite-case - [dc91d5a] http​://bugs.debian.org/690979 [perl #101970] /[[​:lower​:]]/i matches upper case   DEBPKG​:fixes/reading-glob-copy-handle - [fd1564b] http​://bugs.debian.org/629363 [perl #92258] \<$fh> hangs on a glob copy   DEBPKG​:fixes/smartmatch-rhs-precedence - http​://bugs.debian.org/691102 [011be0b] Enforce Any ~~ Object smartmatch precedence   DEBPKG​:fixes/perlcheat-update - http​://bugs.debian.org/691112 [ab0ae0a] Update PerlCheat to 5.14   DEBPKG​:fixes/cgi-cr-escaping - http​://bugs.debian.org/693420 CR escaping for P3P and Set-Cookie headers   DEBPKG​:fixes/maketext-code-execution - [1735f6f] http​://bugs.debian.org/695224 Fix misparsing of maketext strings.   DEBPKG​:fixes/storable-security-warning - [664f237] http​://bugs.debian.org/695223 add a note about security concerns in Storable   DEBPKG​:fixes/digest-sha-doublefree - [rt.cpan.org #82655] http​://bugs.debian.org/698172 [a8c6ff7] Fix a double-free bug in Digest​::SHA   DEBPKG​:fixes/64bitint-signedness-wraparound - http​://bugs.debian.org/698320 [94e529c] Avoid wraparound when casting unsigned size_t to signed ssize_t.   DEBPKG​:fixes/stdin-sigchld - http​://bugs.debian.org/700171 [perl #116621] [be48bbe] add a couple missing LEAVEs in perlio_async_run()   DEBPKG​:fixes/hsplit-rehash - [d59e31f] http​://bugs.debian.org/702296 Prevent premature hsplit() calls\, and only trigger REHASH after hsplit()   DEBPKG​:fixes/encode-memleak - http​://bugs.debian.org/702416 [5814803] Encode​: Fixed a memory leak that occurred in the UTF-8 encoding.   DEBPKG​:fixes/threads_shared_elements_crash - [perl #119089] http​://bugs.debian.org/718438 threads​::shared should not crash if shared elements outlive their aggregate.   DEBPKG​:fixes/perlbug-patchlist - [3541c11] http​://bugs.debian.org/710842 [perl #118433] Make perlbug look up the list of local patches at run time   DEBPKG​:fixes/digest_sha_double_free - [ee8c6f4] [rt.cpan.org #86295] http​://bugs.debian.org/711206 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 regcomp.c​:S_join_exact()   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


@​INC for perl 5.14.2​:   /etc/perl   /usr/local/lib/perl/5.14.2   /usr/local/share/perl/5.14.2   /usr/lib/perl5   /usr/share/perl5   /usr/lib/perl/5.14   /usr/share/perl/5.14   /usr/local/lib/site_perl   .


Environment for perl 5.14.2​:   HOME=/home/epa   LANG=en_US.utf8   LANGUAGE (unset)   LD_LIBRARY_PATH=./   LOGDIR (unset)   PATH=/usr/local/bin​:/usr/bin​:/bin​:/usr/local/games​:/usr/games​:/fs/bin/Linux-x86_64   PERL_BADLANG (unset)   SHELL=/bin/bash

p5pRT commented 9 years ago

From zefram@fysh.org

Emilio PastorMira wrote​:

After doing a simple copy of a string\, if an external c-function is used to modify the copy\, the function will change the original as well. Apparently the "copy-on-write" routine does not work perfectly for external c-functions in the newest versions of Perl.

The bug is in your XS module. XS code is required to check that it is permitted to write to a scalar's buffer\, to handle such situations as read-only scalars. Your module will happily write to a read-only value\, or the temporarily-instantiated stringification of a reference. It should call SvPV_force() or an equivalent\, which will croak on a read-only scalar\, replace a reference with an actual string\, and copy a COW string.

-zefram

p5pRT commented 9 years ago

The RT System itself - Status changed from 'new' to 'open'

p5pRT commented 9 years ago

From Emilio.PastorMira@utimaco.com

Dear zefram\,

Thank you very much for the answer. We will change our code accordingly to correct for the problem.

Could you please tell us where this change of behavior on the API has been documented? Before filing the report I speculated with the idea of an API change\, but I could not the document where this has been described.

Thanks in advance. Cheers\, Emilio

-----Original Message----- From​: Zefram via RT [mailto​:perlbug-followup@​perl.org] Sent​: Freitag\, 28. August 2015 18​:09 To​: Emilio PastorMira Subject​: Re​: [perl #125925] When using external c-functions through perlxs\, copies of strings (copy-on-write) are not properly produced

Emilio PastorMira wrote​:

After doing a simple copy of a string\, if an external c-function is used to modify the copy\, the function will change the original as well. Apparently the "copy-on-write" routine does not work perfectly for external c-functions in the newest versions of Perl.

The bug is in your XS module. XS code is required to check that it is permitted to write to a scalar's buffer\, to handle such situations as read-only scalars. Your module will happily write to a read-only value\, or the temporarily-instantiated stringification of a reference. It should call SvPV_force() or an equivalent\, which will croak on a read-only scalar\, replace a reference with an actual string\, and copy a COW string.

-zefram

________________________________

Utimaco IS GmbH

Seat​: Aachen – Registergericht Aachen HRB 18922 VAT ID No.​: DE 815 496 496 Managementboard​: Malte Pollmann (Chairman) CEO\, Dr. Frank J. Nellissen CFO

Wichtiger Hinweis​: Diese E-Mail kann Betriebs- und Geschäftsgeheimnisse oder sonstige vertrauliche Informationen enthalten. Sollten Sie diese E-Mail irrtümlich erhalten haben\, ist Ihnen eine Kenntnisnahme des Inhalts\, eine Vervielfältigung oder Weitergabe der E-Mail ausdrücklich untersagt. Bitte benachrichtigen Sie uns und vernichten Sie die E-Mail. Der Absender hat alle erdenklichen Vorsichtsmaßnahmen getroffen\, dass die Anlagen dieser E-Mail frei von Computerviren o. Ä. sind. Gleichwohl schließen wir die Haftung für jeden Schaden aus\, der durch Computerviren o. Ä. verursacht wurde\, soweit wir nicht vorsätzlich oder grob fahrlässig gehandelt haben. Wir raten Ihnen\, dass Sie in jedem Fall Ihre eigene Virenprüfung vornehmen\, bevor Sie die Anlagen öffnen. Vielen Dank.

Important Notice​: The information contained in this email message may be confidential information. If you are not the intended recipient\, any use\, interference with\, disclosure or copying of this material is unauthorised and prohibited. Please inform us immediately and destroy the email. We have taken every reasonable precaution to ensure that any attachment to this email has been swept for viruses. However\, we cannot accept liability for any damage sustained as a result of software viruses and would advise that you carry out your own virus checks before opening any attachment. Thank you for your cooperation.

p5pRT commented 9 years ago

From zefram@fysh.org

Emilio PastorMira wrote​:

Could you please tell us where this change of behavior on the API has been documented?

It's not a change. Right from the beginning of Perl 5 there have always been scalars to whose PV it was not correct to write directly.

-zefram

p5pRT commented 9 years ago

From @tonycoz

On Tue Sep 01 06​:11​:07 2015\, Emilio.PastorMira@​utimaco.com wrote​:

Dear zefram\,

Thank you very much for the answer. We will change our code accordingly to correct for the problem.

Could you please tell us where this change of behavior on the API has been documented? Before filing the report I speculated with the idea of an API change\, but I could not the document where this has been described.

While there's been no changes in the requirements of modifiying a SV's PV\, 5.22 does add new documentation on how to do it safely in perlguts.

Since this isn't a bug in perl\, I'm rejecting this ticket.

Tony

p5pRT commented 9 years ago

@tonycoz - Status changed from 'open' to 'rejected'