diff options
author | Richard Levitte <levitte@openssl.org> | 2011-03-19 10:58:14 +0000 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2011-03-19 10:58:14 +0000 |
commit | 537c982306039df02d1e9410dfe205639b547e7a (patch) | |
tree | 4fea2867dfd49eec250ecb40dd9a7339e6febff4 /apps/openssl.c | |
parent | 5904882eaa17be86b7d09fe5f49f1ffb8eee5e99 (diff) |
After some adjustments, apply the changes OpenSSL 1.0.0d on OpenVMS
submitted by Steven M. Schweda <sms@antinode.info>
Diffstat (limited to 'apps/openssl.c')
-rw-r--r-- | apps/openssl.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/apps/openssl.c b/apps/openssl.c index 851e639735..7dbb7ac32a 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -410,7 +410,33 @@ static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]) } if (fp != NULL) { +#if defined( OPENSSL_SYS_VMS) && !defined( VMS_TRUST_ARGV) + /* 2011-03-08 SMS. + * "HP C V7.3-009 on OpenVMS Alpha V8.3" with 64-bit + * pointers (at least) may not NULL-terminate argv[] + * as expected. If necessary, use a (properly) + * NULL-terminated duplicate of argv[]. + */ + char **argv2 = NULL; + + if (argv[ argc] != NULL) + { + argv2 = OPENSSL_malloc( (argc+ 1)* sizeof( char *)); + if (argv2 == NULL) + { ret = -1; goto end; } + memcpy( argv2, argv, (argc* sizeof( char *))); + argv2[ argc] = NULL; + argv = argv2; + } +#endif ret=fp->func(argc,argv); +#if defined( OPENSSL_SYS_VMS) && !defined( VMS_TRUST_ARGV) + /* Free any duplicate argv[] storage. */ + if (argv2 != NULL) + { + OPENSSL_free( argv2); + } +#endif } else if ((strncmp(argv[0],"no-",3)) == 0) { |