Skip Menu |

This queue is for tickets about the Crypt-SSLeay CPAN distribution.

Report information
The Basics
Id: 62150
Status: resolved
Priority: 0/
Queue: Crypt-SSLeay

People
Owner: nanis [...] runu.moc.invalid
Requestors: jand [...] ActiveState.com
Cc:
AdminCc:

Bug Information
Severity: Important
Broken in: (no value)
Fixed in: 0.60_01



Subject: CRYPT_SSLEAY_free() may call the wrong free() function on Windows.
Date: Thu, 14 Oct 2010 13:30:32 -0700
To: <bug-Crypt-SSLeay [...] rt.cpan.org>
From: "Jan Dubois" <jand [...] activestate.com>
On Windows Perl is built with the -DPERL_IMPLICIT_SYS compile option, which redirects many C runtime functions through an additional abstraction layer. Amon other things it points malloc/free to an internal version that maintains heaps per Perl interpreter (for embedding purposes). That means when you call free() in XS code you won't get the C runtime version, but the wrapper from the Perl layer. Using it to free memory that hasn't been allocated by the corresponding malloc() will generate a fatal error (free to wrong pool): t/00-basic.t .... ok t/01-connect.t .. ok # config on MSWin32 # ssl in ..\openssl # lib -L..\openssl\out32 -lssleay32 -llibeay32 -lRSAglue -lrsaref # inc -I..\openssl\inc32 -I..\openssl\inc32 # cc cl Free to wrong pool 35e60 not 30c01a6 at C:/tmp/perl/lib/LWP/Protocol/https.pm line 36. t/02-live.t ..... Dubious, test returned 5 (wstat 1280, 0x500) Failed 1/4 subtests (less 1 skipped subtest: 2 okay) Test Summary Report ------------------- t/02-live.t (Wstat: 1280 Tests: 3 Failed: 0) Non-zero exit status: 5 Parse errors: Bad plan. You planned 4 tests but ran 3. Files=3, Tests=23, 14 wallclock secs ( 0.04 usr + 0.00 sys = 0.04 CPU) Result: FAIL A simple way to avoid the redirection is to define the NO_XSLOCKS preprocessor symbol before including XSUB.h. I've attached a patch that does exactly that. Cheers, -Jan

Message body is not shown because sender requested not to inline it.

Thank you very much for this patch. It will be included in the next developer release (which is overdue by a couple of weeks now -- life and $work intervened). -- Sinan On Thu Oct 14 16:30:49 2010, jand@ActiveState.com wrote: Show quoted text
> On Windows Perl is built with the -DPERL_IMPLICIT_SYS compile option, > which redirects many C runtime functions through an additional > abstraction layer. Amon other things it points malloc/free to an > internal version that maintains heaps per Perl interpreter (for > embedding purposes). > > That means when you call free() in XS code you won't get the C runtime > version, but the wrapper from the Perl layer. Using it to free memory > that hasn't been allocated by the corresponding malloc() will generate > a > fatal error (free to wrong pool): > > > t/00-basic.t .... ok > t/01-connect.t .. ok > # config on MSWin32 > # ssl in ..\openssl > # lib -L..\openssl\out32 -lssleay32 -llibeay32 -lRSAglue -lrsaref > # inc -I..\openssl\inc32 -I..\openssl\inc32 > # cc cl > Free to wrong pool 35e60 not 30c01a6 at > C:/tmp/perl/lib/LWP/Protocol/https.pm line 36. > t/02-live.t ..... > Dubious, test returned 5 (wstat 1280, 0x500) > Failed 1/4 subtests > (less 1 skipped subtest: 2 okay) > > Test Summary Report > ------------------- > t/02-live.t (Wstat: 1280 Tests: 3 Failed: 0) > Non-zero exit status: 5 > Parse errors: Bad plan. You planned 4 tests but ran 3. > Files=3, Tests=23, 14 wallclock secs ( 0.04 usr + 0.00 sys = 0.04 > CPU) > Result: FAIL > > A simple way to avoid the redirection is to define the NO_XSLOCKS > preprocessor symbol before including XSUB.h. > > I've attached a patch that does exactly that. > > Cheers, > -Jan >
I finally applied the patch. I will mark this resolved when I upload 0.61_01. Thank you again and apologies for the long delay. -- Sinan