summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2016-04-18 15:12:58 +0100
committerMatt Caswell <matt@openssl.org>2016-04-18 15:12:58 +0100
commit235f9329304ab9e75e43dc5a409901fc3b3de9ca (patch)
tree3b937f2a1c9b86fd915ca2ff38f756f753631a02
parent36c6f0ad0f1464d47493309c24e2275af7f09c1e (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.c9
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)