mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-04 15:07:41 +00:00
Check prettify message output buffer after cleanup
This makes the message prettify buffer length check accurate.
This commit is contained in:
parent
c9d78bde94
commit
fdc637c4e2
@ -63,10 +63,7 @@ int git_message_prettify(char *message_out, size_t buffer_size, const char *mess
|
||||
{
|
||||
git_buf buf = GIT_BUF_INIT;
|
||||
|
||||
if (strlen(message) + 1 > buffer_size) { /* We have to account for a potentially missing \n */
|
||||
giterr_set(GITERR_INVALID, "Buffer too short to hold the cleaned message");
|
||||
return -1;
|
||||
}
|
||||
assert(message_out && buffer_size);
|
||||
|
||||
*message_out = '\0';
|
||||
|
||||
@ -75,6 +72,11 @@ int git_message_prettify(char *message_out, size_t buffer_size, const char *mess
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (buf.size + 1 > buffer_size) { /* +1 for NUL byte */
|
||||
giterr_set(GITERR_INVALID, "Buffer too short to hold the cleaned message");
|
||||
return -1;
|
||||
}
|
||||
|
||||
git_buf_copy_cstr(message_out, buffer_size, &buf);
|
||||
git_buf_free(&buf);
|
||||
|
||||
|
@ -128,3 +128,63 @@ void test_object_commit_commitstagedfile__generate_predictable_object_ids(void)
|
||||
git_tree_free(tree);
|
||||
git_index_free(index);
|
||||
}
|
||||
|
||||
void test_object_commit_commitstagedfile__message_prettify(void)
|
||||
{
|
||||
char buffer[100];
|
||||
|
||||
cl_git_pass(git_message_prettify(buffer, sizeof(buffer), "", 0));
|
||||
cl_assert_equal_s(buffer, "");
|
||||
cl_git_pass(git_message_prettify(buffer, sizeof(buffer), "", 1));
|
||||
cl_assert_equal_s(buffer, "");
|
||||
|
||||
cl_git_pass(git_message_prettify(buffer, sizeof(buffer), "Short", 0));
|
||||
cl_assert_equal_s(buffer, "Short\n");
|
||||
cl_git_pass(git_message_prettify(buffer, sizeof(buffer), "Short", 1));
|
||||
cl_assert_equal_s(buffer, "Short\n");
|
||||
|
||||
cl_git_pass(git_message_prettify(buffer, sizeof(buffer), "This is longer\nAnd multiline\n# with some comments still in\n", 0));
|
||||
cl_assert_equal_s(buffer, "This is longer\nAnd multiline\n# with some comments still in\n");
|
||||
cl_git_pass(git_message_prettify(buffer, sizeof(buffer), "This is longer\nAnd multiline\n# with some comments still in\n", 1));
|
||||
cl_assert_equal_s(buffer, "This is longer\nAnd multiline\n");
|
||||
|
||||
/* try out overflow */
|
||||
cl_git_pass(git_message_prettify(buffer, sizeof(buffer),
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890"
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "12345678",
|
||||
0));
|
||||
cl_assert_equal_s(buffer,
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890"
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "12345678\n");
|
||||
|
||||
cl_git_pass(git_message_prettify(buffer, sizeof(buffer),
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890"
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "12345678\n",
|
||||
0));
|
||||
cl_assert_equal_s(buffer,
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890"
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "12345678\n");
|
||||
|
||||
cl_git_fail(git_message_prettify(buffer, sizeof(buffer),
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890"
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "123456789",
|
||||
0));
|
||||
cl_git_fail(git_message_prettify(buffer, sizeof(buffer),
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890"
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "123456789\n",
|
||||
0));
|
||||
cl_git_fail(git_message_prettify(buffer, sizeof(buffer),
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890"
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890",
|
||||
0));
|
||||
cl_git_fail(git_message_prettify(buffer, sizeof(buffer),
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890"
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890""x",
|
||||
0));
|
||||
|
||||
cl_git_pass(git_message_prettify(buffer, sizeof(buffer),
|
||||
"1234567890" "1234567890" "1234567890" "1234567890" "1234567890\n"
|
||||
"# 1234567890" "1234567890" "1234567890" "1234567890" "1234567890\n"
|
||||
"1234567890",
|
||||
1));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user