Ensure that NULL r and s parameters cannot be set on DSA_SIG/ECDSA_SIGs.
authorTJ Saunders <tj@castaglia.org>
Fri, 10 Jun 2016 07:36:45 +0000 (00:36 -0700)
committerRich Salz <rsalz@openssl.org>
Mon, 13 Jun 2016 19:44:49 +0000 (15:44 -0400)
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Emilia Käsper <emilia@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/1193)

crypto/dsa/dsa_asn1.c
crypto/ec/ec_asn1.c

index f2818f3ab6c36b7318d6bfc9607beaf5cc4e672f..f79e1d1404a5ce811abefe3c9b82731bc20bd2f6 100644 (file)
@@ -34,6 +34,8 @@ void DSA_SIG_get0(BIGNUM **pr, BIGNUM **ps, const DSA_SIG *sig)
 
 int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s)
 {
+    if (r == NULL || s == NULL)
+        return 0;
     BN_clear_free(sig->r);
     BN_clear_free(sig->s);
     sig->r = r;
index 9bc4ca7b27125a804f4edde545e189e940e2682b..9f7e8373083b6c85fc6b3029219bf9140029970d 100644 (file)
@@ -1182,6 +1182,8 @@ void ECDSA_SIG_get0(BIGNUM **pr, BIGNUM **ps, const ECDSA_SIG *sig)
 
 int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s)
 {
+    if (r == NULL || s == NULL)
+        return 0;
     BN_clear_free(sig->r);
     BN_clear_free(sig->s);
     sig->r = r;