updated: [97bdf08] shell_unescape: fix recently added breakage of decoding escapy strings
Sergei Trofimovich
slyfox at inbox.ru
Tue Feb 10 11:49:58 UTC 2009
The following commit has been merged in the master branch:
commit 97bdf084f8d655ae03879fa0a6492b00930f17f6
Author: Sergei Trofimovich <slyfox at inbox.ru>
Date: Sat Feb 7 16:15:41 2009 +0200
shell_unescape: fix recently added breakage of decoding escapy strings
This pach fixes two issues (both appear only in escapy strings):
* tail cut of escapy string when '\\' is met
* head cut of escapy string when '\\' is met :]
Signed-off-by: Sergei Trofimovich <slyfox at inbox.ru>
diff --git a/src/util.c b/src/util.c
index cee81e8..e47b6dc 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1611,7 +1611,7 @@ shell_unescape(const char* text)
result = g_strdup(text);
return result;
}
- str = g_string_new("");
+ str = g_string_new_len(text, readptr - text);
/* if we're here, we're standing on the first '\' */
char c;
@@ -1622,6 +1622,9 @@ shell_unescape(const char* text)
readptr++;
switch ((c = *readptr))
{
+ case '\0': /* end of string! malformed escape string */
+ goto out;
+
case 'n': g_string_append_c(str,'\n'); break;
case 'r': g_string_append_c(str,'\r'); break;
case 't': g_string_append_c(str,'\t'); break;
@@ -1646,8 +1649,6 @@ shell_unescape(const char* text)
case '`':
case '"':
case ';':
- case '\0': /* end of string! malformed escape string */
- goto out;
default:
g_string_append_c(str,c); break;
}
@@ -1659,7 +1660,6 @@ shell_unescape(const char* text)
readptr++;
}
out:
- g_string_append_c(str,'\0');
result = str->str;
g_string_free(str,FALSE);
--
Midnight Commander Development
More information about the mc-devel
mailing list