Web lists-archives.com

Perl: Cygwin::win_to_posix_path() fails; Possible memory corruption




Hello,

I have a problem using the Perl-integrated Cygwin path conversion methods. 
Below is my Perl bug report (#132443) created via perlbug for details. They suggested to file a bug against the XML::DOM module. But since it is a Cygwin-specific problem, I thought it is better to ask on the mailing list first.

Thanks,
Lando

This is a bug report for perl from ln@xxxxxx,
generated with the help of perlbug 1.40 running under perl 5.26.1.

The Perl-integrated conversion function for Cygwin paths Cygwin::win_to_posix_path() is broken.
Tested with a path read from a XML file using XML::DOM, its output is faulty.
Depending on the setting, its output is empty, garbage or aborts with 'Out of memory'.
Most likely, there are some memory allocation issues.

To reproduce, please call script 'test.pl' with attached XML file 'test.xml' as argument.
Depending on used path to file (relative or absolute, Windows or POSIX style etc.), different types of failure appear.

+++ test.pl +++
#!/usr/bin/env perl

use XML::DOM;

print 'XML FILE (argument):>' . $ARGV[0] . "<\n";
my $xml_path = Cygwin::win_to_posix_path($ARGV[0]);
print 'XML FILE (converted):>' . $xml_path . "<\n";

my $parser = new XML::DOM::Parser();
my $dom_tree = $parser->parsefile($xml_path);
my $attr_path = $dom_tree->getDocumentElement()->getAttribute('attr');
print 'PATH FROM ATTRIBUTE:>' . $attr_path . "<\n";

my $win_attr_path = Cygwin::win_to_posix_path($attr_path);
print 'PATH FROM ATTRIBUTE (converted):>' . $win_attr_path . "<\n";

+++ test.xml +++
<?xml version="1.0" ?>
<Test attr="C:\Cygwin\usr\bin\ls.exe"></Test>

Please note that in my tests, only the path read from the XML is affected. Direct output of this
file before (broken) conversion shows no abnormality though. Therefore I am not sure if this bug
originates in Perl core or XML::DOM module.---
Flags:
category=core
severity=low
---
Site configuration information for perl 5.26.1:

Configured by ASSI at Tue Sep 26 18:57:14 CEST 2017.

Summary of my perl5 (revision 5 version 26 subversion 1) configuration:

Platform:
osname=cygwin
osvers=2.9.0(0.31853)
archname=i686-cygwin-threads-64int-multi
uname='cygwin_nt-6.3-wow cygwin 2.9.0(0.31853) 2017-09-12 10:41 i686 cygwin '
config_args='-des -Dprefix=/usr -Dmksymlinks -Darchname=i686-cygwin-threads-64int
-Dlibperl=cygperl5_26.dll -Dcc=gcc -Dld=g++ -Accflags=-ggdb -O2 -pipe
-Wimplicit-function-declaration
-fdebug-prefix-map=/mnt/share/maint/perl.x86/build=/usr/src/debug/perl-5.26.1-1
-fdebug-prefix-map=/mnt/share/maint/perl.x86/src/perl-5.26.1=/usr/src/debug/perl-5.26.1-1 -fwrapv'
hint=recommended
useposix=true
d_sigaction=define
useithreads=define
usemultiplicity=define
use64bitint=define
use64bitall=undef
uselongdouble=undef
usemymalloc=n
default_inc_excludes_dot=define
bincompat5005=undef
Compiler:
cc='gcc'
ccflags ='-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -D_GNU_SOURCE -ggdb -O2 -pipe
-Wimplicit-function-declaration
-fdebug-prefix-map=/mnt/share/maint/perl.x86/build=/usr/src/debug/perl-5.26.1-1
-fdebug-prefix-map=/mnt/share/maint/perl.x86/src/perl-5.26.1=/usr/src/debug/perl-5.26.1-1 -fwrapv
-fno-strict-aliasing -fstack-protector-strong -D_FORTIFY_SOURCE=2'
optimize='-O3'
cppflags='-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -D_GNU_SOURCE -ggdb -O2 -pipe
-Wimplicit-function-declaration
-fdebug-prefix-map=/mnt/share/maint/perl.x86/build=/usr/src/debug/perl-5.26.1-1
-fdebug-prefix-map=/mnt/share/maint/perl.x86/src/perl-5.26.1=/usr/src/debug/perl-5.26.1-1 -fwrapv
-fno-strict-aliasing -fstack-protector-strong'
ccversion=''
gccversion='6.4.0'
gccosandvers=''
intsize=4
longsize=4
ptrsize=4
doublesize=8
byteorder=12345678
doublekind=3
d_longlong=define
longlongsize=8
d_longdbl=define
longdblsize=12
longdblkind=3
ivtype='long long'
ivsize=8
nvtype='double'
nvsize=8
Off_t='off_t'
lseeksize=8
alignbytes=8
prototype=define
Linker and Libraries:
ld='g++'
ldflags =' -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base
-fstack-protector-strong'
libpth=/usr/lib
libs=-lpthread -lgdbm -ldb -ldl -lcrypt -lgdbm_compat
perllibs=-lpthread -ldl -lcrypt
libc=/usr/lib/libcygwin.a
so=dll
useshrplib=true
libperl=cygperl5_26.dll
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs
dlext=dll
d_dlsymun=undef
ccdlflags=' '
cccdlflags=' '
lddlflags=' --shared -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base
-fstack-protector-strong'

Locally applied patches:
Cygwin: README
Cygwin: use auto-image-base instead of fixed DLL base address
Cygwin: modify hints
Cygwin: Configure correct libsearch
Cygwin: Configure correct libpth
Cygwin: Win32 correct UTF8 handling
Perl: File-Path-2.14 (fixes CVE2017-6512)

---
@INC for perl 5.26.1:
/usr/local/lib/perl5/site_perl/5.26/i686-cygwin-threads-64int
/usr/local/share/perl5/site_perl/5.26
/usr/lib/perl5/vendor_perl/5.26/i686-cygwin-threads-64int
/usr/share/perl5/vendor_perl/5.26
/usr/lib/perl5/5.26/i686-cygwin-threads-64int
/usr/share/perl5/5.26

---
Environment for perl 5.26.1:
HOME=/home/ln
LANG=en_US.UTF-8
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/usr/local/bin:/usr/bin:/cygdrive/c/ProgramData/Oracle/Java/javapath:/cygdrive/c/Windows/system
2:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShe
l/v1.0:/cygdrive/c/Program Files/Git/cmd:/cygdrive/c/Program Files/TortoiseGit/bin
PERL_BADLANG (unset)
SHELL=/bin/bash

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple