[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/2] tools/libxl: Alter the use of rand() in testidl
Coverity warns for every occurrence of rand(), which is made worse because each time the IDL changes, some of the calls get re-flagged. Collect all calls to rand() in a single function, test_rand(), which takes a modulo parameter for convenience. This turns 40 defects currently into 1, which won't get re-flagged when the IDL changes. In addition, fix the erroneous random choice for libxl_defbool_set(). "!!rand() % 1" is unconditionally 0, and even without the "% 1" would still be very heavily skewed in one direction. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CC: Wei Liu <wei.liu2@xxxxxxxxxx> --- tools/libxl/gentest.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/tools/libxl/gentest.py b/tools/libxl/gentest.py index 85311e7..989959f 100644 --- a/tools/libxl/gentest.py +++ b/tools/libxl/gentest.py @@ -30,7 +30,7 @@ def gen_rand_init(ty, v, indent = " ", parent = None): elif isinstance(ty, idl.Array): if parent is None: raise Exception("Array type must have a parent") - s += "%s = rand()%%8;\n" % (parent + ty.lenvar.name) + s += "%s = test_rand(8);\n" % (parent + ty.lenvar.name) s += "%s = calloc(%s, sizeof(*%s));\n" % \ (v, parent + ty.lenvar.name, v) s += "assert(%s);\n" % (v, ) @@ -64,13 +64,13 @@ def gen_rand_init(ty, v, indent = " ", parent = None): elif ty.typename in ["libxl_uuid", "libxl_mac", "libxl_hwcap", "libxl_ms_vm_genid"]: s += "rand_bytes((uint8_t *)%s, sizeof(*%s));\n" % (v,v) elif ty.typename in ["libxl_domid", "libxl_devid"] or isinstance(ty, idl.Number): - s += "%s = rand() %% (sizeof(%s)*8);\n" % \ + s += "%s = test_rand(sizeof(%s) * 8);\n" % \ (ty.pass_arg(v, parent is None), ty.pass_arg(v, parent is None)) elif ty.typename in ["bool"]: - s += "%s = rand() %% 2;\n" % v + s += "%s = test_rand(2);\n" % v elif ty.typename in ["libxl_defbool"]: - s += "libxl_defbool_set(%s, !!rand() %% 1);\n" % v + s += "libxl_defbool_set(%s, test_rand(2));\n" % v elif ty.typename in ["char *"]: s += "%s = rand_str();\n" % v elif ty.private: @@ -104,13 +104,19 @@ if __name__ == '__main__': #include "libxl.h" #include "libxl_utils.h" +static int test_rand(unsigned max) +{ + /* We are not using rand() for its cryptographic properies. */ + return rand() % max; +} + static char *rand_str(void) { - int i, sz = rand() % 32; + int i, sz = test_rand(32); char *s = malloc(sz+1); assert(s); for (i=0; i<sz; i++) - s[i] = 'a' + (rand() % 26); + s[i] = 'a' + test_rand(26); s[i] = '\\0'; return s; } @@ -119,17 +125,17 @@ static void rand_bytes(uint8_t *p, size_t sz) { int i; for (i=0; i<sz; i++) - p[i] = rand() % 256; + p[i] = test_rand(256); } static void libxl_bitmap_rand_init(libxl_bitmap *bitmap) { int i; - bitmap->size = rand() % 16; + bitmap->size = test_rand(16); bitmap->map = calloc(bitmap->size, sizeof(*bitmap->map)); assert(bitmap->map); libxl_for_each_bit(i, *bitmap) { - if (rand() % 2) + if (test_rand(2)) libxl_bitmap_set(bitmap, i); else libxl_bitmap_reset(bitmap, i); @@ -138,13 +144,13 @@ static void libxl_bitmap_rand_init(libxl_bitmap *bitmap) static void libxl_key_value_list_rand_init(libxl_key_value_list *pkvl) { - int i, nr_kvp = rand() % 16; + int i, nr_kvp = test_rand(16); libxl_key_value_list kvl = calloc(nr_kvp+1, 2*sizeof(char *)); assert(kvl); for (i = 0; i<2*nr_kvp; i += 2) { kvl[i] = rand_str(); - if (rand() % 8) + if (test_rand(8)) kvl[i+1] = rand_str(); else kvl[i+1] = NULL; @@ -156,7 +162,7 @@ static void libxl_key_value_list_rand_init(libxl_key_value_list *pkvl) static void libxl_cpuid_policy_list_rand_init(libxl_cpuid_policy_list *pp) { - int i, nr_policies = rand() % 16; + int i, nr_policies = test_rand(16); struct { const char *n; int w; @@ -189,8 +195,8 @@ static void libxl_cpuid_policy_list_rand_init(libxl_cpuid_policy_list *pp) libxl_cpuid_policy_list p = NULL; for (i = 0; i < nr_policies; i++) { - int opt = rand() % nr_options; - int val = rand() % (1<<options[opt].w); + int opt = test_rand(nr_options); + int val = test_rand(1<<options[opt].w); snprintf(buf, 64, \"%s=%#x\", options[opt].n, val); libxl_cpuid_parse_config(&p, buf); } @@ -199,7 +205,7 @@ static void libxl_cpuid_policy_list_rand_init(libxl_cpuid_policy_list *pp) static void libxl_string_list_rand_init(libxl_string_list *p) { - int i, nr = rand() % 16; + int i, nr = test_rand(16); libxl_string_list l = calloc(nr+1, sizeof(char *)); assert(l); -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |