From 5d607f752bcdabcffded0ee1595df3c7b980cbce Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 26 Jan 2017 19:23:46 +0000 Subject: [PATCH] common/edit: Don't use random() function. Generate the random filename using our utility function guestfs_int_random_string. This also means that we will not need to call srandom() in guestfish or virt-edit. --- common/edit/file-edit.c | 18 ++++++------------ edit/edit.c | 3 --- fish/fish.c | 3 --- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/common/edit/file-edit.c b/common/edit/file-edit.c index a7300117f..81b1f1f2c 100644 --- a/common/edit/file-edit.c +++ b/common/edit/file-edit.c @@ -303,18 +303,10 @@ do_upload (guestfs_h *g, const char *fn, const char *tempfile, return 0; } -static char -random_char (void) -{ - const char c[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - return c[random () % (sizeof c - 1)]; -} - static char * generate_random_name (const char *filename) { char *ret, *p; - size_t i; ret = malloc (strlen (filename) + 16); if (!ret) { @@ -328,11 +320,13 @@ generate_random_name (const char *filename) p++; /* Because of "+ 16" above, there should be enough space in the - * output buffer to write 8 random characters here. + * output buffer to write 8 random characters here plus the + * trailing \0. */ - for (i = 0; i < 8; ++i) - *p++ = random_char (); - *p++ = '\0'; + if (guestfs_int_random_string (p, 8) == -1) { + perror ("guestfs_int_random_string"); + return NULL; + } return ret; /* caller will free */ } diff --git a/edit/edit.c b/edit/edit.c index 2f986a34c..6807c28a3 100644 --- a/edit/edit.c +++ b/edit/edit.c @@ -102,9 +102,6 @@ main (int argc, char *argv[]) bindtextdomain (PACKAGE, LOCALEBASEDIR); textdomain (PACKAGE); - /* We use random(3) below. */ - srandom (time (NULL)); - enum { HELP_OPTION = CHAR_MAX + 1 }; static const char options[] = "a:b:c:d:e:m:vVx"; diff --git a/fish/fish.c b/fish/fish.c index b7d63cf56..beccafdbb 100644 --- a/fish/fish.c +++ b/fish/fish.c @@ -180,9 +180,6 @@ main (int argc, char *argv[]) bindtextdomain (PACKAGE, LOCALEBASEDIR); textdomain (PACKAGE); - /* We use random(3) in edit.c. */ - srandom (time (NULL)); - parse_config (); enum { HELP_OPTION = CHAR_MAX + 1 };