[geany/geany-plugins] cff697: pohelper: Properly escape inserted name and email
Colomban Wendling
git-noreply at xxxxx
Wed Mar 13 00:45:34 UTC 2013
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Wed, 13 Mar 2013 00:45:34 UTC
Commit: cff6972c25acab79c33435bf296a448a6b8b125e
https://github.com/geany/geany-plugins/commit/cff6972c25acab79c33435bf296a448a6b8b125e
Log Message:
-----------
pohelper: Properly escape inserted name and email
Make sure inserted name and email don't contain control characters
such as quotes (") or backslashes (\).
Modified Paths:
--------------
pohelper/src/gph-plugin.c
Modified: pohelper/src/gph-plugin.c
36 files changed, 34 insertions(+), 2 deletions(-)
===================================================================
@@ -410,6 +410,35 @@ enum {
return FALSE;
}
+/* escapes @str so it is valid to put it inside a message
+ * escapes '\b', '\f', '\n', '\r', '\t', '\v', '\' and '"'
+ * unlike g_strescape(), it doesn't escape non-ASCII characters so keeps
+ * all of UTF-8 */
+static gchar *
+escape_string (const gchar *str)
+{
+ gchar *new = g_malloc (strlen (str) * 2 + 1);
+ gchar *p;
+
+ for (p = new; *str; str++) {
+ switch (*str) {
+ case '\b': *p++ = '\\'; *p++ = 'b'; break;
+ case '\f': *p++ = '\\'; *p++ = 'f'; break;
+ case '\n': *p++ = '\\'; *p++ = 'n'; break;
+ case '\r': *p++ = '\\'; *p++ = 'r'; break;
+ case '\t': *p++ = '\\'; *p++ = 't'; break;
+ case '\v': *p++ = '\\'; *p++ = 'v'; break;
+ case '\\': *p++ = '\\'; *p++ = '\\'; break;
+ case '"': *p++ = '\\'; *p++ = '"'; break;
+ default:
+ *p++ = *str;
+ }
+ }
+ *p = 0;
+
+ return new;
+}
+
static void
on_document_save (GObject *obj,
GeanyDocument *doc,
@@ -419,14 +448,15 @@ enum {
gboolean update_header = TRUE; /* FIXME: make this configurable */
if (update_header) {
+ gchar *name = escape_string (geany_data->template_prefs->developer);
+ gchar *mail = escape_string (geany_data->template_prefs->mail);
gchar *date;
gchar *translator;
date = utils_get_date_time ("\"PO-Revision-Date: %Y-%m-%d %H:%M%z\\n\"",
NULL);
translator = g_strdup_printf ("\"Last-Translator: %s <%s>\\n\"",
- geany_data->template_prefs->developer,
- geany_data->template_prefs->mail);
+ name, mail);
sci_start_undo_action (doc->editor->sci);
regex_replace (doc->editor->sci, "^\"PO-Revision-Date: .*\"$", date);
@@ -435,6 +465,8 @@ enum {
g_free (date);
g_free (translator);
+ g_free (name);
+ g_free (mail);
}
}
}
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Plugins-Commits
mailing list