]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Size of random output is now a long, also added option to select chunk size
authorKevin K Biju <kevinkbiju@gmail.com>
Wed, 23 Mar 2022 05:10:50 +0000 (10:40 +0530)
committerPauli <pauli@openssl.org>
Mon, 28 Mar 2022 00:50:20 +0000 (11:50 +1100)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17949)

apps/rand.c

index f99c91dbbf45b73375c6027d81cdfd16b690e4b4..e9aedb4bbc0f078e08d7e78a2e1f1c11ce4a9e80 100644 (file)
@@ -52,7 +52,9 @@ int rand_main(int argc, char **argv)
     BIO *out = NULL;
     char *outfile = NULL, *prog;
     OPTION_CHOICE o;
-    int format = FORMAT_BINARY, i, num = -1, r, ret = 1;
+    int format = FORMAT_BINARY, r, i, ret = 1, buflen = 131072;
+    long num = -1;
+    uint8_t *buf = NULL;
 
     prog = opt_init(argc, argv, rand_options);
     while ((o = opt_next()) != OPT_EOF) {
@@ -93,7 +95,7 @@ int rand_main(int argc, char **argv)
     argc = opt_num_rest();
     argv = opt_rest();
     if (argc == 1) {
-        if (!opt_int(argv[0], &num) || num <= 0)
+        if (!opt_long(argv[0], &num) || num <= 0)
             goto opthelp;
     } else if (!opt_check_rest_arg(NULL)) {
         goto opthelp;
@@ -113,13 +115,11 @@ int rand_main(int argc, char **argv)
         out = BIO_push(b64, out);
     }
 
+    buf = app_malloc(buflen, "buffer for output file");
     while (num > 0) {
-        unsigned char buf[4096];
-        int chunk;
+        long chunk;
 
-        chunk = num;
-        if (chunk > (int)sizeof(buf))
-            chunk = sizeof(buf);
+        chunk = (num > buflen) ? buflen : num;
         r = RAND_bytes(buf, chunk);
         if (r <= 0)
             goto end;
@@ -143,6 +143,7 @@ int rand_main(int argc, char **argv)
  end:
     if (ret != 0)
         ERR_print_errors(bio_err);
+    OPENSSL_free(buf);
     release_engine(e);
     BIO_free_all(out);
     return ret;