xref: /netbsd-src/tests/lib/libc/stdlib/t_random.c (revision 2090d7b5969792348eabf2e0a26f88c7892df840)
1*2090d7b5Sjruoho /* $NetBSD: t_random.c,v 1.3 2012/03/29 08:56:06 jruoho Exp $ */
253263fa5Sjruoho 
353263fa5Sjruoho /*-
453263fa5Sjruoho  * Copyright (c) 2012 The NetBSD Foundation, Inc.
553263fa5Sjruoho  * All rights reserved.
653263fa5Sjruoho  *
753263fa5Sjruoho  * This code is derived from software contributed to The NetBSD Foundation
853263fa5Sjruoho  * by Jukka Ruohonen.
953263fa5Sjruoho  *
1053263fa5Sjruoho  * Redistribution and use in source and binary forms, with or without
1153263fa5Sjruoho  * modification, are permitted provided that the following conditions
1253263fa5Sjruoho  * are met:
1353263fa5Sjruoho  * 1. Redistributions of source code must retain the above copyright
1453263fa5Sjruoho  *    notice, this list of conditions and the following disclaimer.
1553263fa5Sjruoho  * 2. Redistributions in binary form must reproduce the above copyright
1653263fa5Sjruoho  *    notice, this list of conditions and the following disclaimer in the
1753263fa5Sjruoho  *    documentation and/or other materials provided with the distribution.
1853263fa5Sjruoho  *
1953263fa5Sjruoho  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
2053263fa5Sjruoho  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2153263fa5Sjruoho  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2253263fa5Sjruoho  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2353263fa5Sjruoho  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2453263fa5Sjruoho  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2553263fa5Sjruoho  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2653263fa5Sjruoho  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2753263fa5Sjruoho  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2853263fa5Sjruoho  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2953263fa5Sjruoho  * POSSIBILITY OF SUCH DAMAGE.
3053263fa5Sjruoho  */
3153263fa5Sjruoho #include <sys/cdefs.h>
32*2090d7b5Sjruoho __RCSID("$NetBSD: t_random.c,v 1.3 2012/03/29 08:56:06 jruoho Exp $");
3353263fa5Sjruoho 
3453263fa5Sjruoho #include <atf-c.h>
35*2090d7b5Sjruoho #include <stdio.h>
3653263fa5Sjruoho #include <stdlib.h>
3753263fa5Sjruoho 
3853263fa5Sjruoho /*
3953263fa5Sjruoho  * TODO: Add some general RNG tests (cf. the famous "diehard" tests?).
4053263fa5Sjruoho  */
4153263fa5Sjruoho 
42*2090d7b5Sjruoho ATF_TC(random_same);
ATF_TC_HEAD(random_same,tc)43*2090d7b5Sjruoho ATF_TC_HEAD(random_same, tc)
4453263fa5Sjruoho {
4553263fa5Sjruoho 	atf_tc_set_md_var(tc, "descr",
46*2090d7b5Sjruoho 	    "Test that random(3) does not always return the same "
47*2090d7b5Sjruoho 	    "value when the seed is initialized to zero");
4853263fa5Sjruoho }
4953263fa5Sjruoho 
50*2090d7b5Sjruoho #define MAX_ITER 10
51*2090d7b5Sjruoho 
ATF_TC_BODY(random_same,tc)52*2090d7b5Sjruoho ATF_TC_BODY(random_same, tc)
5353263fa5Sjruoho {
54*2090d7b5Sjruoho 	long buf[MAX_ITER];
5553263fa5Sjruoho 	size_t i, j;
5653263fa5Sjruoho 
579ca3e292Sjruoho 	/*
589ca3e292Sjruoho 	 * See CVE-2012-1577.
599ca3e292Sjruoho 	 */
6053263fa5Sjruoho 	srandom(0);
6153263fa5Sjruoho 
62*2090d7b5Sjruoho 	for (i = 0; i < __arraycount(buf); i++) {
6353263fa5Sjruoho 
64*2090d7b5Sjruoho 		buf[i] = random();
65*2090d7b5Sjruoho 
66*2090d7b5Sjruoho 		for (j = 0; j < i; j++) {
67*2090d7b5Sjruoho 
68*2090d7b5Sjruoho 			(void)fprintf(stderr, "i = %zu, j = %zu: "
69*2090d7b5Sjruoho 			    "%ld vs. %ld\n", i, j, buf[i], buf[j]);
70*2090d7b5Sjruoho 
71*2090d7b5Sjruoho 			ATF_CHECK(buf[i] != buf[j]);
7253263fa5Sjruoho 		}
73*2090d7b5Sjruoho 	}
7453263fa5Sjruoho }
7553263fa5Sjruoho 
ATF_TP_ADD_TCS(tp)7653263fa5Sjruoho ATF_TP_ADD_TCS(tp)
7753263fa5Sjruoho {
7853263fa5Sjruoho 
79*2090d7b5Sjruoho 	ATF_TP_ADD_TC(tp, random_same);
8053263fa5Sjruoho 
8153263fa5Sjruoho 	return atf_no_error();
8253263fa5Sjruoho }
83