From 9c62ab525b86867664fa25749eccc51e094bbd5d 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 --- AUTHORS | 3 ++- src/lib/eina/eina_str.c | 13 ++++++++----- src/tests/eina/eina_test_str.c | 7 +++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/AUTHORS b/AUTHORS index c4be95a7aa..2a705de5b3 100644 --- a/AUTHORS +++ b/AUTHORS @@ -54,7 +54,8 @@ 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 b9f0c034ff..53e27d5a56 100644 --- a/src/lib/eina/eina_str.c +++ b/src/lib/eina/eina_str.c @@ -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; diff --git a/src/tests/eina/eina_test_str.c b/src/tests/eina/eina_test_str.c index 63acec9e00..23c8c6cf87 100644 --- a/src/tests/eina/eina_test_str.c +++ b/src/tests/eina/eina_test_str.c @@ -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