test/evp_test.c: address sanitizer errors in pderive_test_run.
authorAndy Polyakov <appro@openssl.org>
Sat, 30 Jun 2018 10:52:10 +0000 (12:52 +0200)
committerAndy Polyakov <appro@openssl.org>
Mon, 2 Jul 2018 08:48:35 +0000 (10:48 +0200)
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6614)

test/evp_test.c

index fb2ca279bf7ce493134451084e17f487ee637f21..c2434db170526af3a837afc65a54f56d5ccde140 100644 (file)
@@ -1592,19 +1592,19 @@ static int pderive_test_run(struct evp_test *t)
     struct pkey_data *kdata = t->data;
     unsigned char *out = NULL;
     size_t out_len;
-    const char *err = "INTERNAL_ERROR";
+    const char *err = "DERIVE_ERROR";
 
-    out_len = kdata->output_len;
+    if (EVP_PKEY_derive(kdata->ctx, NULL, &out_len) <= 0)
+        goto err;
     out = OPENSSL_malloc(out_len);
     if (!out) {
         fprintf(stderr, "Error allocating output buffer!\n");
         exit(1);
     }
-    err = "DERIVE_ERROR";
     if (EVP_PKEY_derive(kdata->ctx, out, &out_len) <= 0)
         goto err;
     err = "SHARED_SECRET_LENGTH_MISMATCH";
-    if (out_len != kdata->output_len)
+    if (kdata->output == NULL || out_len != kdata->output_len)
         goto err;
     err = "SHARED_SECRET_MISMATCH";
     if (check_output(t, kdata->output, out, out_len))