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>
Michelle Legrand <legrand.michelle@outlook.com>
Shilpa Singh <shilpa.singh@samsung.com> <shilpasingh.o@gmail.com>
Prasoon Singh <prasoonsingh16@gmail.com>
Eet
---

View File

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

View File

@ -108,6 +108,13 @@ START_TEST(str_simple)
free(str);
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();
}
END_TEST