mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-09-05 00:35:13 +00:00
parser: fix memory leaks in unit tests
This patch fixes the unit test memory leaks found by intrigeri using AddressSanitizer in the following email thread: https://lists.ubuntu.com/archives/apparmor/2015-August/008491.html Signed-off-by: Steve Beattie <steve@nxnw.org> Acked-by: Seth Arnold <seth.arnold@canonical.com>
This commit is contained in:
@@ -939,85 +939,40 @@ int test_str_to_boolean(void)
|
||||
return rc;
|
||||
}
|
||||
|
||||
#define MY_TEST_UNQUOTED(input, expected, description) \
|
||||
do { \
|
||||
char *result_str = NULL; \
|
||||
char *output_str = NULL; \
|
||||
\
|
||||
result_str = processunquoted((input), strlen((input))); \
|
||||
asprintf(&output_str, "processunquoted: %s\tinput = '%s'\texpected = '%s'\tresult = '%s'", \
|
||||
(description), (input), (expected), result_str); \
|
||||
MY_TEST(strcmp((expected), result_str) == 0, output_str); \
|
||||
\
|
||||
free(output_str); \
|
||||
free(result_str); \
|
||||
} \
|
||||
while(0)
|
||||
|
||||
int test_processunquoted(void)
|
||||
{
|
||||
int rc = 0;
|
||||
const char *teststring;
|
||||
const char *resultstring;
|
||||
|
||||
teststring = "";
|
||||
MY_TEST(strcmp(teststring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on empty string");
|
||||
|
||||
teststring = "\\1";
|
||||
resultstring = "\001";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on one digit octal");
|
||||
|
||||
teststring = "\\8";
|
||||
resultstring = "\\8";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on invalid octal digit \\8");
|
||||
|
||||
teststring = "\\18";
|
||||
resultstring = "\0018";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on one digit octal followed by invalid octal digit");
|
||||
|
||||
teststring = "\\1a";
|
||||
resultstring = "\001a";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on one digit octal followed by hex digit a");
|
||||
|
||||
teststring = "\\1z";
|
||||
resultstring = "\001z";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on one digit octal follow by char z");
|
||||
|
||||
teststring = "\\11";
|
||||
resultstring = "\011";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on two digit octal");
|
||||
|
||||
teststring = "\\118";
|
||||
resultstring = "\0118";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on two digit octal followed by invalid octal digit");
|
||||
|
||||
teststring = "\\11a";
|
||||
resultstring = "\011a";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on two digit octal followed by hex digit a");
|
||||
|
||||
teststring = "\\11z";
|
||||
resultstring = "\011z";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on two digit octal followed by char z");
|
||||
|
||||
teststring = "\\111";
|
||||
resultstring = "\111";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on three digit octal");
|
||||
|
||||
teststring = "\\378";
|
||||
resultstring = "\0378";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on three digit octal two large, taken as 2 digit octal plus trailing char");
|
||||
|
||||
teststring = "123\\421123";
|
||||
resultstring = "123\0421123";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on two character octal followed by valid octal digit \\421");
|
||||
|
||||
teststring = "123\\109123";
|
||||
resultstring = "123\109123";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on octal 109");
|
||||
|
||||
teststring = "123\\1089123";
|
||||
resultstring = "123\1089123";
|
||||
MY_TEST(strcmp(resultstring, processunquoted(teststring, strlen(teststring))) == 0,
|
||||
"processunquoted on octal 108");
|
||||
MY_TEST_UNQUOTED("", "", "empty string");
|
||||
MY_TEST_UNQUOTED("\\1", "\001", "one digit octal");
|
||||
MY_TEST_UNQUOTED("\\8", "\\8", "invalid octal digit \\8");
|
||||
MY_TEST_UNQUOTED("\\18", "\0018", "one digit octal followed by invalid octal digit");
|
||||
MY_TEST_UNQUOTED("\\1a", "\001a", "one digit octal followed by hex digit a");
|
||||
MY_TEST_UNQUOTED("\\1z", "\001z", "one digit octal follow by char z");
|
||||
MY_TEST_UNQUOTED("\\11", "\011", "two digit octal");
|
||||
MY_TEST_UNQUOTED("\\118", "\0118", "two digit octal followed by invalid octal digit");
|
||||
MY_TEST_UNQUOTED("\\11a", "\011a", "two digit octal followed by hex digit a");
|
||||
MY_TEST_UNQUOTED("\\11z", "\011z", "two digit octal followed by char z");
|
||||
MY_TEST_UNQUOTED("\\111", "\111", "three digit octal");
|
||||
MY_TEST_UNQUOTED("\\378", "\0378", "three digit octal two large, taken as 2 digit octal plus trailing char");
|
||||
MY_TEST_UNQUOTED("123\\421123", "123\0421123", "two character octal followed by valid octal digit \\421");
|
||||
MY_TEST_UNQUOTED("123\\109123", "123\109123", "octal 109");
|
||||
MY_TEST_UNQUOTED("123\\1089123", "123\1089123", "octal 108");
|
||||
|
||||
return rc;
|
||||
}
|
||||
@@ -1116,12 +1071,14 @@ int test_processquoted(void)
|
||||
out = processquoted(teststring, strlen(teststring));
|
||||
MY_TEST(strcmp(processedstring, out) == 0,
|
||||
"processquoted passthrough quoted one digit trailing octal \\4");
|
||||
free(out);
|
||||
|
||||
teststring = "\"abcdefg\\04\"";
|
||||
processedstring = "abcdefg\004";
|
||||
out = processquoted(teststring, strlen(teststring));
|
||||
MY_TEST(strcmp(processedstring, out) == 0,
|
||||
"processquoted passthrough quoted two digit trailing octal \\04");
|
||||
free(out);
|
||||
|
||||
teststring = "\"abcdefg\\004\"";
|
||||
processedstring = "abcdefg\004";
|
||||
|
Reference in New Issue
Block a user