diff options
author | 2001-06-22 00:02:45 +0000 | |
---|---|---|
committer | 2001-06-22 00:02:45 +0000 | |
commit | ce6fc0900b2b4e5edea1b1b8e032cab822e464e9 (patch) | |
tree | b11b933beb98ff4d5fb927f3ad0fdef1f485128d /lib/libssl/src/crypto/pkcs12/p12_utl.c | |
parent | Build and install Heimdal infofile. (diff) | |
download | wireguard-openbsd-ce6fc0900b2b4e5edea1b1b8e032cab822e464e9.tar.xz wireguard-openbsd-ce6fc0900b2b4e5edea1b1b8e032cab822e464e9.zip |
openssl-engine-0.9.6a merge
Diffstat (limited to 'lib/libssl/src/crypto/pkcs12/p12_utl.c')
-rw-r--r-- | lib/libssl/src/crypto/pkcs12/p12_utl.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/libssl/src/crypto/pkcs12/p12_utl.c b/lib/libssl/src/crypto/pkcs12/p12_utl.c index 17f41b45496..2f1d1e534fc 100644 --- a/lib/libssl/src/crypto/pkcs12/p12_utl.c +++ b/lib/libssl/src/crypto/pkcs12/p12_utl.c @@ -62,30 +62,34 @@ /* Cheap and nasty Unicode stuff */ -unsigned char *asc2uni (const char *asc, unsigned char **uni, int *unilen) +unsigned char *asc2uni(const char *asc, int asclen, unsigned char **uni, int *unilen) { int ulen, i; unsigned char *unitmp; - ulen = strlen(asc)*2 + 2; - if (!(unitmp = OPENSSL_malloc (ulen))) return NULL; - for (i = 0; i < ulen; i+=2) { + if (asclen == -1) asclen = strlen(asc); + ulen = asclen*2 + 2; + if (!(unitmp = OPENSSL_malloc(ulen))) return NULL; + for (i = 0; i < ulen - 2; i+=2) { unitmp[i] = 0; unitmp[i + 1] = asc[i>>1]; } + /* Make result double null terminated */ + unitmp[ulen - 2] = 0; + unitmp[ulen - 1] = 0; if (unilen) *unilen = ulen; if (uni) *uni = unitmp; return unitmp; } -char *uni2asc (unsigned char *uni, int unilen) +char *uni2asc(unsigned char *uni, int unilen) { int asclen, i; char *asctmp; asclen = unilen / 2; /* If no terminating zero allow for one */ - if (uni[unilen - 1]) asclen++; + if (!unilen || uni[unilen - 1]) asclen++; uni++; - if (!(asctmp = OPENSSL_malloc (asclen))) return NULL; + if (!(asctmp = OPENSSL_malloc(asclen))) return NULL; for (i = 0; i < unilen; i+=2) asctmp[i>>1] = uni[i]; asctmp[asclen - 1] = 0; return asctmp; |