diff options
author | Matt Caswell <matt@openssl.org> | 2016-04-18 15:12:58 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2016-04-18 15:12:58 +0100 |
commit | 235f9329304ab9e75e43dc5a409901fc3b3de9ca (patch) | |
tree | 3b937f2a1c9b86fd915ca2ff38f756f753631a02 | |
parent | 36c6f0ad0f1464d47493309c24e2275af7f09c1e (diff) |
Unsigned chars can't be negative
Fix a problem where an unsigned char was being checked to see if it was
negative.
Reviewed-by: Richard Levitte <levitte@openssl.org>
-rw-r--r-- | crypto/o_str.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/crypto/o_str.c b/crypto/o_str.c index 9811e2df2b..660226fcec 100644 --- a/crypto/o_str.c +++ b/crypto/o_str.c @@ -243,6 +243,7 @@ unsigned char *OPENSSL_hexstr2buf(const char *str, long *len) { unsigned char *hexbuf, *q; unsigned char ch, cl; + int chi, cli; const unsigned char *p; size_t s; @@ -262,14 +263,14 @@ unsigned char *OPENSSL_hexstr2buf(const char *str, long *len) OPENSSL_free(hexbuf); return NULL; } - cl = OPENSSL_hexchar2int(cl); - ch = OPENSSL_hexchar2int(ch); - if (cl < 0 || ch < 0) { + cli = OPENSSL_hexchar2int(cl); + chi = OPENSSL_hexchar2int(ch); + if (cli < 0 || chi < 0) { OPENSSL_free(hexbuf); CRYPTOerr(CRYPTO_F_OPENSSL_HEXSTR2BUF, CRYPTO_R_ILLEGAL_HEX_DIGIT); return NULL; } - *q++ = (ch << 4) | cl; + *q++ = (unsigned char)((chi << 4) | cli); } if (len) |