[openssl-dev] [openssl.org #3733] ZOS 1.0.1k bug report with fix.

Randall Geyer via RT rt at openssl.org
Sat Mar 7 17:14:17 UTC 2015


util/mkbuildinf.pl builds an invalid char array, if the associated *OS390* Configure entry contain backslashes(\).

 

Our configure entry:

"OS390-Unix","c89:-O2 -Wc,langlvl\\\(extended\\\),longname,enum\\\(int\\\),float\\\(ieee\\\),exportall,xplink\\\(callback\\\),target\\\(zOSV1R12\\\) -Wl,xplink,compat=ZOSV1R12 -DB_ENDIAN -DCHARSET_EBCDIC -DNO_SYS_PARAM_H -DOS390 -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE::-Wc,rent:::THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR::::::::::::::::::os390-shared:-Wc,dll:-Wl,dll:.so:",

 

Solution - new util/mkbuildinf.pl:

 

#!/usr/local/bin/perl

 

my ($cflags, $platform) = @ARGV;

 

$cflags = "compiler: $cflags";

$date = localtime();

print <<"END_OUTPUT";

#ifndef MK1MF_BUILD

    /* auto-generated by util/mkbuildinf.pl for crypto/cversion.c */

    #define CFLAGS cflags

    /*

     * Generate CFLAGS as an array of individual characters. This is a

     * workaround for the situation where CFLAGS gets too long for a C90 string

     * literal

     */

    static const char cflags[] = {

END_OUTPUT

my $ctr = 0;

foreach my $c (split //, $cflags) {

    # Max 18 characters per line

    if  (($ctr++ % 18) == 0) {

        if ($ctr != 1) {

            print "\n";

        }

        print "        ";

    }

    $c =~ s|\\|\\\\|g;

    print "'$c',";

}

print <<"END_OUTPUT";

'\\0'

    };

    #define PLATFORM "platform: $platform"

    #define DATE "built on: $date"

#endif

END_OUTPUT



More information about the openssl-dev mailing list