Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PATCH] fix SEGV in XS::APItest::Backrefs::Comctl32Version() #16508

Closed
p5pRT opened this issue Apr 14, 2018 · 12 comments
Closed

[PATCH] fix SEGV in XS::APItest::Backrefs::Comctl32Version() #16508

p5pRT opened this issue Apr 14, 2018 · 12 comments

Comments

@p5pRT
Copy link

@p5pRT p5pRT commented Apr 14, 2018

Migrated from rt.perl.org#133113 (status was 'resolved')

Searchable as RT133113$

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Apr 14, 2018

From @bulk88

Created by @bulk88

This is intended for 5.28. Follow on to
https://rt-archive.perl.org/perl5/Ticket/Display.html?id=133084 fixes the
segv/0xc0000005 described in that ticket with mingw 3.4.5. 2nd attempt
to send bc spam filter.

Perl Info
---
Flags:
                   category=core
                   severity=low
---
Site configuration information for perl 5.27.9:

Configured by Administrator at Tue Jan 30 20:34:30 2018.

Summary of my perl5 (revision 5 version 27 subversion 9) configuration:

                 Platform:
                   osname=MSWin32
                   osvers=5.2.3790
                   archname=MSWin32-x86-multi-thread
                   uname=''
                   config_args='undef'
                   hint=recommended
                   useposix=true
                   d_sigaction=undef
                   useithreads=define
                   usemultiplicity=define
                   use64bitint=undef
                   use64bitall=undef
                   uselongdouble=undef
                   usemymalloc=n
                   default_inc_excludes_dot=define
                   bincompat5005=undef
                 Compiler:
                   cc='cl'
                   ccflags ='-nologo -GF -W3 -O1 -MD -Zi -DNDEBUG -GL 
-DWIN32
-D_CONSOLE -DNO_STRICT -D_CRT_SECURE_NO_DEPRECATE
-D_CRT_NONSTDC_NO_DEPRECATE  -DPERL_TEXTMODE_SCRIPTS
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DWIN32_NO_REGISTRY'
                   optimize='-O1 -MD -Zi -DNDEBUG -GL'
                   cppflags='-DWIN32'
                   ccversion='15.00.30729.01'
                   gccversion=''
                   gccosandvers=''
                   intsize=4
                   longsize=4
                   ptrsize=4
                   doublesize=8
                   byteorder=1234
                   doublekind=3
                   d_longlong=undef
                   longlongsize=8
                   d_longdbl=define
                   longdblsize=8
                   longdblkind=0
                   ivtype='long'
                   ivsize=4
                   nvtype='double'
                   nvsize=8
                   Off_t='__int64'
                   lseeksize=8
                   alignbytes=8
                   prototype=define
                 Linker and Libraries:
                   ld='link'
                   ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -ltcg
-libpath:"c:\perl\lib\CORE"        -machine:x86'
                   libpth="C:\Program Files (x86)\Microsoft Visual Studio
9.0\VC\lib"
                   libs=oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib
netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib
odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib
                   perllibs=oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib
netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib
odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib
                   libc=msvcrt.lib
                   so=dll
                   useshrplib=true
                   libperl=perl527.lib
                   gnulibc_version=''
                 Dynamic Linking:
                   dlsrc=dl_win32.xs
                   dlext=dll
                   d_dlsymun=undef
                   ccdlflags=' '
                   cccdlflags=' '
                   lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf
-ltcg
                   -libpath:"c:\perl\lib\CORE"        -machine:x86'


---
@INC for perl 5.27.9:
                   lib
                   C:/p527/srcnew/lib

---
Environment for perl 5.27.9:
                   CYGWIN=tty
                   HOME (unset)
                   LANG (unset)
                   LANGUAGE (unset)
                   LD_LIBRARY_PATH=/usr/lib/x86:/usr/X11R6/lib
                   LOGDIR (unset)
                   PATH=C:\WINDOWS\system32;C:\Program Files (x86)\Microsoft
Visual
Studio 9.0\VC\BIN;C:\Program Files\Microsoft
SDKs\Windows\v6.0A\bin;C:\Perl\bin;C:\WINDOWS;C:\Program Files
(x86)\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files
(x86)\Git\bin;C:\sp3220\c\bin;
                   PERL_BADLANG (unset)
                   SHELL (unset)







@p5pRT
Copy link
Author

@p5pRT p5pRT commented Apr 14, 2018

From @bulk88

0001-fix-SEGV-in-XS-APItest-Backrefs-Comctl32Version.patch
>From 5bcf555c8adbaf5127416f50701b26026e28f214 Mon Sep 17 00:00:00 2001
From: Daniel Dragan <bulk88@hotmail.com>
Date: Thu, 12 Apr 2018 14:53:09 -0400
Subject: [PATCH] fix SEGV in XS::APItest::Backrefs::Comctl32Version()

really old Mingw GCCs (3.4.5 specifically) dont implement _alloca
correctly, switch to a simpler variation

a follow on to perl #133084 and see also problems I had with alloca on
very old GCCs in https://rt.cpan.org/Public/Bug/Display.html?id=80217
---
 ext/XS-APItest/APItest.pm | 2 +-
 ext/XS-APItest/APItest.xs | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/ext/XS-APItest/APItest.pm b/ext/XS-APItest/APItest.pm
index 8eda0f7..b98ccf8 100644
--- a/ext/XS-APItest/APItest.pm
+++ b/ext/XS-APItest/APItest.pm
@@ -5,7 +5,7 @@ use strict;
 use warnings;
 use Carp;
 
-our $VERSION = '0.96';
+our $VERSION = '0.97';
 
 require XSLoader;
 
diff --git a/ext/XS-APItest/APItest.xs b/ext/XS-APItest/APItest.xs
index 18e5b1c..b9e9b09 100644
--- a/ext/XS-APItest/APItest.xs
+++ b/ext/XS-APItest/APItest.xs
@@ -6808,7 +6808,7 @@ Comctl32Version()
             croak("Comctl32Version: comctl32.dll no version???");
         ver = LoadResource(dll, hrsc);
         len = SizeofResource(dll, hrsc);
-        vercopy = _alloca(len);
+        vercopy = (void *)sv_grow(sv_newmortal(),len);
         memcpy(vercopy, ver, len);
         if (VerQueryValue(vercopy, "\\", (void**)&info, &len)) {
             int dwValueMS1 = (info->dwFileVersionMS>>16);
-- 
2.5.0.windows.1

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Apr 17, 2018

From @tonycoz

On Sat, 14 Apr 2018 13​:53​:24 -0700, bulk88 wrote​:

This is intended for 5.28. Follow on to
https://rt-archive.perl.org/perl5/Ticket/Display.html?id=133084 fixes the
segv/0xc0000005 described in that ticket with mingw 3.4.5. 2nd
attempt
to send bc spam filter.

Thanks, applied as 2f145a2.

Tony

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Apr 17, 2018

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

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Apr 20, 2018

From @bulk88

Created by @bulk88

See attached patch. This is intended for 5.28. Follow on to
https://rt-archive.perl.org/perl5/Ticket/Display.html?id=133084 fixes the
segv/0xc0000005 described in that ticket with mingw 3.4.5

Perl Info
---
Flags:
                  category=core
                  severity=low
---
Site configuration information for perl 5.27.9:

Configured by Administrator at Tue Jan 30 20:34:30 2018.

Summary of my perl5 (revision 5 version 27 subversion 9) configuration:

                Platform:
                  osname=MSWin32
                  osvers=5.2.3790
                  archname=MSWin32-x86-multi-thread
                  uname=''
                  config_args='undef'
                  hint=recommended
                  useposix=true
                  d_sigaction=undef
                  useithreads=define
                  usemultiplicity=define
                  use64bitint=undef
                  use64bitall=undef
                  uselongdouble=undef
                  usemymalloc=n
                  default_inc_excludes_dot=define
                  bincompat5005=undef
                Compiler:
                  cc='cl'
                  ccflags ='-nologo -GF -W3 -O1 -MD -Zi -DNDEBUG -GL -DWIN32
-D_CONSOLE -DNO_STRICT -D_CRT_SECURE_NO_DEPRECATE
-D_CRT_NONSTDC_NO_DEPRECATE  -DPERL_TEXTMODE_SCRIPTS
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DWIN32_NO_REGISTRY'
                  optimize='-O1 -MD -Zi -DNDEBUG -GL'
                  cppflags='-DWIN32'
                  ccversion='15.00.30729.01'
                  gccversion=''
                  gccosandvers=''
                  intsize=4
                  longsize=4
                  ptrsize=4
                  doublesize=8
                  byteorder=1234
                  doublekind=3
                  d_longlong=undef
                  longlongsize=8
                  d_longdbl=define
                  longdblsize=8
                  longdblkind=0
                  ivtype='long'
                  ivsize=4
                  nvtype='double'
                  nvsize=8
                  Off_t='__int64'
                  lseeksize=8
                  alignbytes=8
                  prototype=define
                Linker and Libraries:
                  ld='link'
                  ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -ltcg
-libpath:"c:\perl\lib\CORE"        -machine:x86'
                  libpth="C:\Program Files (x86)\Microsoft Visual Studio
9.0\VC\lib"
                  libs=oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib
netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib
odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib
                  perllibs=oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib
netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib
odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib
                  libc=msvcrt.lib
                  so=dll
                  useshrplib=true
                  libperl=perl527.lib
                  gnulibc_version=''
                Dynamic Linking:
                  dlsrc=dl_win32.xs
                  dlext=dll
                  d_dlsymun=undef
                  ccdlflags=' '
                  cccdlflags=' '
                  lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf
-ltcg
                  -libpath:"c:\perl\lib\CORE"        -machine:x86'


---
@INC for perl 5.27.9:
                  lib
                  C:/p527/srcnew/lib

---
Environment for perl 5.27.9:
                  CYGWIN=tty
                  HOME (unset)
                  LANG (unset)
                  LANGUAGE (unset)
                  LD_LIBRARY_PATH=/usr/lib/x86:/usr/X11R6/lib
                  LOGDIR (unset)
                  PATH=C:\WINDOWS\system32;C:\Program Files (x86)\Microsoft
Visual
Studio 9.0\VC\BIN;C:\Program Files\Microsoft
SDKs\Windows\v6.0A\bin;C:\Perl\bin;C:\WINDOWS;C:\Program Files
(x86)\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files
(x86)\Git\bin;C:\sp3220\c\bin;
                  PERL_BADLANG (unset)
                  SHELL (unset)






@p5pRT
Copy link
Author

@p5pRT p5pRT commented Apr 20, 2018

From @bulk88

0001-fix-SEGV-in-XS-APItest-Backrefs-Comctl32Version.patch
From 5bcf555c8adbaf5127416f50701b26026e28f214 Mon Sep 17 00:00:00 2001
From: Daniel Dragan <bulk88@hotmail.com>
Date: Thu, 12 Apr 2018 14:53:09 -0400
Subject: [PATCH] fix SEGV in XS::APItest::Backrefs::Comctl32Version()

really old Mingw GCCs (3.4.5 specifically) dont implement _alloca
correctly, switch to a simpler variation

a follow on to perl #133084 and see also problems I had with alloca on
very old GCCs in https://rt.cpan.org/Public/Bug/Display.html?id=80217
---
 ext/XS-APItest/APItest.pm | 2 +-
 ext/XS-APItest/APItest.xs | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/ext/XS-APItest/APItest.pm b/ext/XS-APItest/APItest.pm
index 8eda0f7..b98ccf8 100644
--- a/ext/XS-APItest/APItest.pm
+++ b/ext/XS-APItest/APItest.pm
@@ -5,7 +5,7 @@ use strict;
 use warnings;
 use Carp;
 
-our $VERSION = '0.96';
+our $VERSION = '0.97';
 
 require XSLoader;
 
diff --git a/ext/XS-APItest/APItest.xs b/ext/XS-APItest/APItest.xs
index 18e5b1c..b9e9b09 100644
--- a/ext/XS-APItest/APItest.xs
+++ b/ext/XS-APItest/APItest.xs
@@ -6808,7 +6808,7 @@ Comctl32Version()
             croak("Comctl32Version: comctl32.dll no version???");
         ver = LoadResource(dll, hrsc);
         len = SizeofResource(dll, hrsc);
-        vercopy = _alloca(len);
+        vercopy = (void *)sv_grow(sv_newmortal(),len);
         memcpy(vercopy, ver, len);
         if (VerQueryValue(vercopy, "\\", (void**)&info, &len)) {
             int dwValueMS1 = (info->dwFileVersionMS>>16);
-- 
2.5.0.windows.1

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Apr 20, 2018

From @bulk88

On Mon, 16 Apr 2018 18​:32​:32 -0700, tonyc wrote​:

Thanks, applied as 2f145a2.

Tony

Tkt status needs to be changed.

--
bulk88 ~ bulk88 at hotmail.com

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Apr 30, 2018

@tonycoz - Status changed from 'open' to 'pending release'

@p5pRT
Copy link
Author

@p5pRT p5pRT commented May 14, 2018

From @steve-m-hay

Duplicate of [perl #133113], which is fixed (pending release). Will merge into that ticket...

@p5pRT
Copy link
Author

@p5pRT p5pRT commented May 14, 2018

From [Unknown Contact. See original ticket]

Duplicate of [perl #133113], which is fixed (pending release). Will merge into that ticket...

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 23, 2018

From @khwilliamson

Thank you for filing this report. You have helped make Perl better.

With the release yesterday of Perl 5.28.0, this and 185 other issues have been
resolved.

Perl 5.28.0 may be downloaded via​:
https://metacpan.org/release/XSAWYERX/perl-5.28.0

If you find that the problem persists, feel free to reopen this ticket.

@p5pRT p5pRT closed this as completed Jun 23, 2018
@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 23, 2018

@khwilliamson - Status changed from 'pending release' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant