Beispiel #1
0
void generate_random_page(char *page)
{
	unsigned int i;

	switch (rand() % 6) {
	/* return a page of complete trash */
	case 0:	/* bytes */
		for (i = 0; i < page_size; )
			page[i++] = (unsigned char)rand();
		return;

	case 1:	/* words */
		for (i = 0; i < (page_size / 2); ) {
			page[i++] = 0;
			page[i++] = (unsigned char)rand();
		}
		return;

	case 2:	/* ints */
		for (i = 0; i < (page_size / 4); ) {
			page[i++] = 0;
			page[i++] = 0;
			page[i++] = 0;
			page[i++] = (unsigned char)rand();
		}
		return;

	/* return a page that looks kinda like a struct */
	case 3:	fabricate_onepage_struct(page);
		return;

	/* return a page of unicode nonsense. */
	case 4:	gen_unicode_page(page);
		return;

	/* page of 0's and 1's. */
	case 5:
		for (i = 0; i < page_size; )
			page[i++] = (unsigned char)rand() % 2;
		return;

	default:
		BUG("unreachable!\n");
		return;
	}
}
Beispiel #2
0
static void generate_random_page(char *page)
{
	unsigned int i;
	unsigned int p = 0;

	switch (rand() % 8) {

	case 0:
		memset(page, 0, page_size);
		return;

	case 1:
		memset(page, 0xff, page_size);
		return;

	case 2:
		memset(page, rand() % 0xff, page_size);
		return;

	case 3:
		for (i = 0; i < page_size; )
			page[i++] = (unsigned char)rand();
		return;

	case 4:
		for (i = 0; i < page_size; )
			page[i++] = (unsigned char)rand_bool();
		return;

	/* return a page that looks kinda like a struct */
	case 5:	fabricate_onepage_struct(page);
		return;

	/* page full of format strings. */
	case 6:
		for (i = 0; i < page_size; i += 2) {
			page[i] = '%';
			switch (rand_bool()) {
			case 0:	page[i + 1] = 'd';
				break;
			case 1:	page[i + 1] = 's';
				break;
			}
		}
		page_size = getpagesize();	// Hack for clang 3.3 false positive.
		page[rand() % page_size] = 0;
		return;

	/* ascii representation of a random number */
	case 7:
		switch (rand() % 3) {
		case 0:
			switch (rand() % 3) {
			case 0:	p = sprintf(page, "%lu", (unsigned long) rand64());
				break;
			case 1:	p = sprintf(page, "%ld", (unsigned long) rand64());
				break;
			case 2:	p = sprintf(page, "%lx", (unsigned long) rand64());
				break;
			}
			break;

		case 1:
			switch (rand() % 3) {
			case 0:	p = sprintf(page, "%u", (unsigned int) rand32());
				break;
			case 1:	p = sprintf(page, "%d", (int) rand32());
				break;
			case 2:	p = sprintf(page, "%x", (int) rand32());
				break;
			}
			break;

		case 2:
			switch (rand() % 3) {
			case 0:	p = sprintf(page, "%u", (unsigned char) rand());
				break;
			case 1:	p = sprintf(page, "%d", (char) rand());
				break;
			case 2:	p = sprintf(page, "%x", (char) rand());
				break;
			}
			break;

		}

		page[p] = 0;
		break;
	}
}