eina: fix for escapable charachters not getting escaped if it comes after '\t' or '\n'

Summary:
Escaping is not happening whenever any escapable characters is coming after
'\t' or '\n'. It will also fix invalid read of 1 byte which happens for string where
last charachter is '\t' or '\n' like "eina\t".

Test Plan:
Take a string like "eina\t ". Observe space which is followed by tab is not getting
escaped.

Signed-off-by: Prasoon Singh <prasoon.16@samsung.com>

Reviewers: shilpasingh, rajeshps, govi, cedric

Reviewed By: shilpasingh

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D4847

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
Prasoon Singh 2017-05-09 10:37:12 -07:00 committed by Cedric BAIL
parent 07024ab6c8
commit 9c62ab525b
3 changed files with 17 additions and 6 deletions

View File

@ -54,7 +54,8 @@ Rajeev Ranjan (Rajeev) <rajeev.r@samsung.com> <rajeev.jnnce@gmail.com>
Subodh Kumar <s7158.kumar@samsung.com> Subodh Kumar <s7158.kumar@samsung.com>
Michelle Legrand <legrand.michelle@outlook.com> Michelle Legrand <legrand.michelle@outlook.com>
Shilpa Singh <shilpa.singh@samsung.com> <shilpasingh.o@gmail.com> Shilpa Singh <shilpa.singh@samsung.com> <shilpasingh.o@gmail.com>
Prasoon Singh <prasoonsingh16@gmail.com>
Eet Eet
--- ---

View File

@ -668,24 +668,27 @@ eina_str_escape(const char *str)
{ {
*d = '\\'; *d = '\\';
d++; d++;
*d = *s;
break; break;
} }
case '\n': case '\n':
{ {
*d = '\\'; d++; *d = '\\'; d++;
*d = 'n'; d++; *d = 'n';
s++;
break; break;
} }
case '\t': case '\t':
{ {
*d = '\\'; d++; *d = '\\'; d++;
*d = 't'; d++; *d = 't';
s++; break;
}
default:
{
*d = *s;
break; break;
} }
} }
*d = *s;
} }
*d = 0; *d = 0;
return s2; return s2;

View File

@ -108,6 +108,13 @@ START_TEST(str_simple)
free(str); free(str);
free(ret); free(ret);
str = malloc(sizeof(char) * 4);
strcpy(str, "a\t ");
ret = eina_str_escape(str);
fail_if(!eina_streq(ret, "a\\t\\ "));
free(str);
free(ret);
eina_shutdown(); eina_shutdown();
} }
END_TEST END_TEST