Subject: | Crypt::OpenSSL::RSA sometimes loses .al files (WinXP) |
Hello,
I've encountered some strange behaviour when PAR-ing
Crypt::OpenSSL::RSA on Windows XP. When pp is invoked with
certain combinations of arguments it leaves some .al and .ix files
out of the exe causing a runtime error.
This command works fine and shows the files than should be included:
C:\>pp -M Crypt::OpenSSL::RSA -e 1
C:\>unzip -l a.exe | perl -nle "print if /RSA/"
1232 03-14-07 11:48 Crypt/OpenSSL/RSA.pm
40 03-14-07 11:48 auto/Crypt/OpenSSL/RSA/RSA.bs
32768 03-09-06 15:29 auto/Crypt/OpenSSL/RSA/RSA.dll
854 03-09-06 15:29 auto/Crypt/OpenSSL/RSA/RSA.exp
288 03-14-07 11:48 auto/Crypt/OpenSSL/RSA/autosplit.ix
538 03-14-07 11:48 auto/Crypt/OpenSSL/RSA/get_key_parameters.al
533 03-14-07 11:48 auto/Crypt/OpenSSL/RSA/import_random_seed.al
598 03-14-07 11:48 auto/Crypt/OpenSSL/RSA/new_key_from_parameters.al
783 03-14-07 11:48 auto/Crypt/OpenSSL/RSA/new_public_key.al
The problem only seems to occur when Crypt::OpenSSL::RSA is included
by both a -M option and via a use statement elsewhere in another file
(including via another -M module use-ing it).
C:\>cat use
use Crypt::OpenSSL::RSA;
C:\>pp -M Crypt::OpenSSL::RSA -c use
C:\>unzip -l a.exe | perl -nle "print if /RSA/"
1232 03-14-07 11:47 Crypt/OpenSSL/RSA.pm
0 03-09-06 15:29 auto/Crypt/OpenSSL/RSA/RSA.bs
32768 03-09-06 15:29 auto/Crypt/OpenSSL/RSA/RSA.dll
An example of the runtime error encountered is:
C:\>cat use_new
use Crypt::OpenSSL::RSA;
Crypt::OpenSSL::RSA->new_public_key("");
C:\>pp -M Crypt::OpenSSL::RSA -c use_new
C:\>a.exe
Can't locate auto/Crypt/OpenSSL/RSA/new_public_.al in @INC (@INC
contains: C:\DO
CUME~1\bsb\LOCALS~1\Temp\par-bsb\cache-92b4fb2ae60883741253d28c35c2575efae9ef8a\
inc\lib
C:\DOCUME~1\bsb\LOCALS~1\Temp\par-bsb\cache-92b4fb2ae60883741253d28c35c2
575efae9ef8a\inc CODE(0xdbcfb4) CODE(0xdbd0ec)) at script/use_new line 2
The truncatation new_public_key.al -> new_public_.al is probably not
useful for the error message as it makes it harder to find the files
involved.
It's easy to work around this, just don't -M Crypt::OpenSSL::RSA.
Another clue/red-herring is that PARing Crypt::OpenSSL::RSA on Linux
produces an error trying to create a tempfile in a strange location:
$ pp -M Crypt::OpenSSL::RSA -c use_new
Error getting name to temp file from template
/usr/lib/perl5/Crypt/OpenSSL/RSA.pm.XXXXXX: Parent directory
(/usr/lib/perl5/Crypt/OpenSSL/) is not writable
at /usr/local/share/perl/5.8.7/Module/ScanDeps.pm line 829
$ pp -M Crypt::OpenSSL::RSA -e 1
$ pp -M Crypt::OpenSSL::RSA -c /dev/null
/usr/bin/pp: Input /dev/null is not a plain file
Use of uninitialized value in pattern match (m//) at
/usr/local/share/perl/5.8.7/PAR/Packer.pm line 209.
Error getting name to temp file from template
/usr/lib/perl5/Crypt/OpenSSL/RSA.pm.XXXXXX: Parent directory
(/usr/lib/perl5/Crypt/OpenSSL/) is not writable
at /usr/local/share/perl/5.8.7/Module/ScanDeps.pm line 829
Environment:
Windows:
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 25 registered patches, see perl -V for more detail)
Binary build 817 [257965] provided by ActiveState http://www.ActiveState.com
Built Mar 20 2006 17:54:25
Crypt::OpenSSL::RSA 0.22 from a ppd
PAR 0.959 I'm not sure where it's from now
Linux:
perl v5.8.8 built for i486-linux-gnu-thread-multi
pmvers PAR
0.90
pmvers Crypt::OpenSSL::RSA
0.23
Let me know if there's anything I can try out,
Brad