[Libguestfs] [PATCH v2 1/2] common/edit: Don't use random() function.

Richard W.M. Jones rjones at redhat.com
Thu Jan 26 19:31:06 UTC 2017


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 a730011..81b1f1f 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 2f986a3..6807c28 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 b7d63cf..beccafd 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 };
-- 
2.9.3




More information about the Libguestfs mailing list