bin2bn(): When len==0, just return a zero BIGNUM
authorRichard Levitte <levitte@openssl.org>
Thu, 12 Jan 2023 09:17:01 +0000 (10:17 +0100)
committerHugo Landau <hlandau@openssl.org>
Fri, 20 Jan 2023 07:38:30 +0000 (07:38 +0000)
This allows calls with s==NULL and len==0 to be safe.  It probably already
was, but address sanitizers could still complain.

Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Hugo Landau <hlandau@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/20033)

crypto/bn/bn_lib.c

index 4fe6ce071a3b01f6952ac2b056c816260d75c920..9d665c26fc4187a9696cc6a1315571252fb2e880 100644 (file)
@@ -446,6 +446,15 @@ static BIGNUM *bin2bn(const unsigned char *s, int len, BIGNUM *ret,
         return NULL;
     bn_check_top(ret);
 
+    /*
+     * If the input has no bits, the number is considered zero.
+     * This makes calls with s==NULL and len==0 safe.
+     */
+    if (len == 0) {
+        BN_clear(ret);
+        return ret;
+    }
+
     /*
      * The loop that does the work iterates from least to most
      * significant BIGNUM chunk, so we adapt parameters to transfer