diff options
| author | Tony Lindgren <tony@atomide.com> | 2021-07-27 11:25:08 +0300 | 
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2021-07-27 11:25:08 +0300 | 
| commit | 353b7a55dcaf5fb8758e09ebe2ddf5f3adbac7c5 (patch) | |
| tree | 081200957b3d8925cbe913020d45a4e3ba61a7a3 /lib/test-string_helpers.c | |
| parent | 3ff340e24c9dd5cff9fc07d67914c5adf67f80d6 (diff) | |
| parent | c68ef4ad180e09805fa46965d15e1dfadf09ffa5 (diff) | |
Merge branch 'fixes-v5.14' into fixes
Diffstat (limited to 'lib/test-string_helpers.c')
| -rw-r--r-- | lib/test-string_helpers.c | 157 | 
1 files changed, 141 insertions, 16 deletions
| diff --git a/lib/test-string_helpers.c b/lib/test-string_helpers.c index 10360d4ea273..2185d71704f0 100644 --- a/lib/test-string_helpers.c +++ b/lib/test-string_helpers.c @@ -19,7 +19,7 @@ static __init bool test_string_check_buf(const char *name, unsigned int flags,  	if (q_real == q_test && !memcmp(out_test, out_real, q_test))  		return true; -	pr_warn("Test '%s' failed: flags = %u\n", name, flags); +	pr_warn("Test '%s' failed: flags = %#x\n", name, flags);  	print_hex_dump(KERN_WARNING, "Input: ", DUMP_PREFIX_NONE, 16, 1,  		       in, p, true); @@ -136,7 +136,7 @@ static const struct test_string_2 escape0[] __initconst = {{  		.flags = ESCAPE_SPACE | ESCAPE_HEX,  	},{  		/* terminator */ -	}}, +	}}  },{  	.in = "\\h\\\"\a\e\\",  	.s1 = {{ @@ -150,7 +150,7 @@ static const struct test_string_2 escape0[] __initconst = {{  		.flags = ESCAPE_SPECIAL | ESCAPE_HEX,  	},{  		/* terminator */ -	}}, +	}}  },{  	.in = "\eb \\C\007\"\x90\r]",  	.s1 = {{ @@ -201,12 +201,26 @@ static const struct test_string_2 escape0[] __initconst = {{  		.flags = ESCAPE_NP | ESCAPE_HEX,  	},{  		/* terminator */ -	}}, +	}} +},{ +	.in = "\007 \eb\"\x90\xCF\r", +	.s1 = {{ +		.out = "\007 \eb\"\\220\\317\r", +		.flags = ESCAPE_OCTAL | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\\x90\\xcf\r", +		.flags = ESCAPE_HEX | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\xCF\r", +		.flags = ESCAPE_NA, +	},{ +		/* terminator */ +	}}  },{  	/* terminator */  }}; -#define	TEST_STRING_2_DICT_1		"b\\ \t\r" +#define	TEST_STRING_2_DICT_1		"b\\ \t\r\xCF"  static const struct test_string_2 escape1[] __initconst = {{  	.in = "\f\\ \n\r\t\v",  	.s1 = {{ @@ -216,16 +230,40 @@ static const struct test_string_2 escape1[] __initconst = {{  		.out = "\f\\x5c\\x20\n\\x0d\\x09\v",  		.flags = ESCAPE_HEX,  	},{ +		.out = "\f\\134\\040\n\\015\\011\v", +		.flags = ESCAPE_ANY | ESCAPE_APPEND, +	},{ +		.out = "\\014\\134\\040\\012\\015\\011\\013", +		.flags = ESCAPE_OCTAL | ESCAPE_APPEND | ESCAPE_NAP, +	},{ +		.out = "\\x0c\\x5c\\x20\\x0a\\x0d\\x09\\x0b", +		.flags = ESCAPE_HEX | ESCAPE_APPEND | ESCAPE_NAP, +	},{ +		.out = "\f\\134\\040\n\\015\\011\v", +		.flags = ESCAPE_OCTAL | ESCAPE_APPEND | ESCAPE_NA, +	},{ +		.out = "\f\\x5c\\x20\n\\x0d\\x09\v", +		.flags = ESCAPE_HEX | ESCAPE_APPEND | ESCAPE_NA, +	},{  		/* terminator */ -	}}, +	}}  },{ -	.in = "\\h\\\"\a\e\\", +	.in = "\\h\\\"\a\xCF\e\\",  	.s1 = {{ -		.out = "\\134h\\134\"\a\e\\134", +		.out = "\\134h\\134\"\a\\317\e\\134",  		.flags = ESCAPE_OCTAL,  	},{ +		.out = "\\134h\\134\"\a\\317\e\\134", +		.flags = ESCAPE_ANY | ESCAPE_APPEND, +	},{ +		.out = "\\134h\\134\"\\007\\317\\033\\134", +		.flags = ESCAPE_OCTAL | ESCAPE_APPEND | ESCAPE_NAP, +	},{ +		.out = "\\134h\\134\"\a\\317\e\\134", +		.flags = ESCAPE_OCTAL | ESCAPE_APPEND | ESCAPE_NA, +	},{  		/* terminator */ -	}}, +	}}  },{  	.in = "\eb \\C\007\"\x90\r]",  	.s1 = {{ @@ -233,7 +271,89 @@ static const struct test_string_2 escape1[] __initconst = {{  		.flags = ESCAPE_OCTAL,  	},{  		/* terminator */ -	}}, +	}} +},{ +	.in = "\007 \eb\"\x90\xCF\r", +	.s1 = {{ +		.out = "\007 \eb\"\x90\xCF\r", +		.flags = ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\xCF\r", +		.flags = ESCAPE_SPACE | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\xCF\r", +		.flags = ESCAPE_SPECIAL | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\xCF\r", +		.flags = ESCAPE_SPACE | ESCAPE_SPECIAL | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\\317\r", +		.flags = ESCAPE_OCTAL | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\\317\r", +		.flags = ESCAPE_SPACE | ESCAPE_OCTAL | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\\317\r", +		.flags = ESCAPE_SPECIAL | ESCAPE_OCTAL | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\\317\r", +		.flags = ESCAPE_ANY | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\\xcf\r", +		.flags = ESCAPE_HEX | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\\xcf\r", +		.flags = ESCAPE_SPACE | ESCAPE_HEX | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\\xcf\r", +		.flags = ESCAPE_SPECIAL | ESCAPE_HEX | ESCAPE_NA, +	},{ +		.out = "\007 \eb\"\x90\\xcf\r", +		.flags = ESCAPE_SPACE | ESCAPE_SPECIAL | ESCAPE_HEX | ESCAPE_NA, +	},{ +		/* terminator */ +	}} +},{ +	.in = "\007 \eb\"\x90\xCF\r", +	.s1 = {{ +		.out = "\007 \eb\"\x90\xCF\r", +		.flags = ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\xCF\\r", +		.flags = ESCAPE_SPACE | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\xCF\r", +		.flags = ESCAPE_SPECIAL | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\xCF\\r", +		.flags = ESCAPE_SPACE | ESCAPE_SPECIAL | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\\317\\015", +		.flags = ESCAPE_OCTAL | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\\317\\r", +		.flags = ESCAPE_SPACE | ESCAPE_OCTAL | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\\317\\015", +		.flags = ESCAPE_SPECIAL | ESCAPE_OCTAL | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\\317\r", +		.flags = ESCAPE_ANY | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\\xcf\\x0d", +		.flags = ESCAPE_HEX | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\\xcf\\r", +		.flags = ESCAPE_SPACE | ESCAPE_HEX | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\\xcf\\x0d", +		.flags = ESCAPE_SPECIAL | ESCAPE_HEX | ESCAPE_NAP, +	},{ +		.out = "\007 \eb\"\x90\\xcf\\r", +		.flags = ESCAPE_SPACE | ESCAPE_SPECIAL | ESCAPE_HEX | ESCAPE_NAP, +	},{ +		/* terminator */ +	}}  },{  	/* terminator */  }}; @@ -290,7 +410,7 @@ test_string_escape_overflow(const char *in, int p, unsigned int flags, const cha  	q_real = string_escape_mem(in, p, NULL, 0, flags, esc);  	if (q_real != q_test) -		pr_warn("Test '%s' failed: flags = %u, osz = 0, expected %d, got %d\n", +		pr_warn("Test '%s' failed: flags = %#x, osz = 0, expected %d, got %d\n",  			name, flags, q_test, q_real);  } @@ -315,8 +435,13 @@ static __init void test_string_escape(const char *name,  		/* NULL injection */  		if (flags & ESCAPE_NULL) {  			in[p++] = '\0'; -			out_test[q_test++] = '\\'; -			out_test[q_test++] = '0'; +			/* '\0' passes isascii() test */ +			if (flags & ESCAPE_NA && !(flags & ESCAPE_APPEND && esc)) { +				out_test[q_test++] = '\0'; +			} else { +				out_test[q_test++] = '\\'; +				out_test[q_test++] = '0'; +			}  		}  		/* Don't try strings that have no output */ @@ -459,17 +584,17 @@ static int __init test_string_helpers_init(void)  	unsigned int i;  	pr_info("Running tests...\n"); -	for (i = 0; i < UNESCAPE_ANY + 1; i++) +	for (i = 0; i < UNESCAPE_ALL_MASK + 1; i++)  		test_string_unescape("unescape", i, false);  	test_string_unescape("unescape inplace",  			     get_random_int() % (UNESCAPE_ANY + 1), true);  	/* Without dictionary */ -	for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++) +	for (i = 0; i < ESCAPE_ALL_MASK + 1; i++)  		test_string_escape("escape 0", escape0, i, TEST_STRING_2_DICT_0);  	/* With dictionary */ -	for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++) +	for (i = 0; i < ESCAPE_ALL_MASK + 1; i++)  		test_string_escape("escape 1", escape1, i, TEST_STRING_2_DICT_1);  	/* Test string_get_size() */ | 
