From e1a04e8d584631220fe4ef93c7ae9e1aed30792e Mon Sep 17 00:00:00 2001 From: Prasoon Singh Date: Tue, 9 May 2017 10:37:12 -0700 Subject: [PATCH] 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 Reviewers: shilpasingh, rajeshps, govi, cedric Reviewed By: shilpasingh Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4847 Signed-off-by: Cedric BAIL Change-Id: Ie2cd495024390b3fdb5dba81a660680d6b2fa9d1 --- AUTHORS | 2 ++ src/lib/eina/eina_str.c | 13 ++++++++----- src/tests/eina/eina_test_str.c | 7 +++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/AUTHORS b/AUTHORS index eab2011..781468b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -53,6 +53,8 @@ ChunEon Park (Hermet) Rajeev Ranjan (Rajeev) Subodh Kumar Michelle Legrand +Shilpa Singh +Prasoon Singh Eet --- diff --git a/src/lib/eina/eina_str.c b/src/lib/eina/eina_str.c index c3d9c4c..bdf1417 100644 --- a/src/lib/eina/eina_str.c +++ b/src/lib/eina/eina_str.c @@ -630,24 +630,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; diff --git a/src/tests/eina/eina_test_str.c b/src/tests/eina/eina_test_str.c index 8233dd8..d4ef920 100644 --- a/src/tests/eina/eina_test_str.c +++ b/src/tests/eina/eina_test_str.c @@ -107,6 +107,13 @@ 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 -- 2.7.4