1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-07-28 01:41:48 +03:00

misc: Add a function to encode newlines

Given a string, the added function encodes existing newline characters
('\n') as the string "\\n" and puts into a given output buffer.

The output buffer must have at least 2 times the length of the input
string plus 1 for the terminating '\0'. In the worst case, each
character can be replaced by 2 characters.

Fixes T189

Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
This commit is contained in:
Anderson Toshiyuki Sasaki
2019-11-04 15:35:15 +01:00
committed by Andreas Schneider
parent 6c79ed9801
commit c9ce8fa40b
3 changed files with 63 additions and 0 deletions

View File

@ -637,6 +637,24 @@ static void torture_ssh_quote_file_name(UNUSED_PARAM(void **state))
assert_int_equal(rc, SSH_ERROR);
}
static void torture_ssh_newline_vis(UNUSED_PARAM(void **state))
{
int rc;
char buffer[1024];
rc = ssh_newline_vis("\n", buffer, 1024);
assert_int_equal(rc, 2);
assert_string_equal(buffer, "\\n");
rc = ssh_newline_vis("\n\n\n\n", buffer, 1024);
assert_int_equal(rc, 8);
assert_string_equal(buffer, "\\n\\n\\n\\n");
rc = ssh_newline_vis("a\nb\n", buffer, 1024);
assert_int_equal(rc, 6);
assert_string_equal(buffer, "a\\nb\\n");
}
int torture_run_tests(void) {
int rc;
struct CMUnitTest tests[] = {
@ -656,6 +674,7 @@ int torture_run_tests(void) {
cmocka_unit_test(torture_timeout_update),
cmocka_unit_test(torture_ssh_analyze_banner),
cmocka_unit_test(torture_ssh_dir_writeable),
cmocka_unit_test(torture_ssh_newline_vis),
cmocka_unit_test(torture_ssh_mkdirs),
cmocka_unit_test(torture_ssh_quote_file_name),
};