Sun May 06 00:32:31 2018: Request 125279 was acted upon.
Transaction: Ticket created by [email protected]
Queue: Win32-OLE
Subject: Use of uninitialized value in OLE.xs Variant::Type() function
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: [email protected]
Status: new
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=125279 >
Hi,
I downloaded the module from CPAN and compiled by myself. The 'make
test' produces some warning messages when performing test on
t/2_variant.t:
% make test
"/usr/bin/perl.exe" -MExtUtils::Command::MM -e 'cp_nonempty' -- OLE.bs
blib/arch/auto/Win32/OLE/OLE.bs 644
PERL_DL_NONLAZY=1 "/usr/bin/perl.exe" "-MExtUtils::Command::MM"
"-MTest::Harness" "-e" "undef *Test::Harness::Switches;
test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/1_nls.t ....... ok
t/2_variant.t ... 1/38 Win32::OLE(0.1712) error 0xffffccb0 at
t/2_variant.t line 39.
eval {...} called at t/2_variant.t line 39
Win32::OLE(0.1712) error 0xffffccb0 at t/2_variant.t line 40.
eval {...} called at t/2_variant.t line 40
Win32::OLE(0.1712) error 0xffffccb0 at t/2_variant.t line 73.
eval {...} called at t/2_variant.t line 73
Win32::OLE(0.1712) error 0xffffccb0 at t/2_variant.t line 94.
eval {...} called at t/2_variant.t line 94
:
I found the warning messages come from an issue in OLE.xs function
Type(). There is a flow control according to variable ix and then a
CheckOleError() is called with variable hr. IT seems hr value is
uninitialized on this call if the flow went through ix=0,3,4,5.
A patch to fix it is as attached.
diff -ru Win32-OLE-0.1712-1/OLE.xs Win32-OLE-0.1712-0/OLE.xs
--- Win32-OLE-0.1712-1/OLE.xs 2014-05-15 06:34:17.000000000 +0800
+++ Win32-OLE-0.1712-0/OLE.xs 2018-05-06 12:12:45.264228900 +0800
@@ -5924,7 +5924,7 @@
SV *sv = &PL_sv_undef;
if (pVarObj) {
VARIANT *pVariant = &pVarObj->variant;
- HRESULT hr;
+ HRESULT hr = 0;
HV *olestash = GetWin32OleStash(aTHX_ self);
SetLastOleError(aTHX_ olestash);
sv = sv_newmortal();