diff --git a/src/lightdm-webkit2-greeter-ext.c b/src/lightdm-webkit2-greeter-ext.c index e9fcc7e..dad4801 100644 --- a/src/lightdm-webkit2-greeter-ext.c +++ b/src/lightdm-webkit2-greeter-ext.c @@ -52,6 +52,37 @@ static JSClassRef lightdm_layout_class, lightdm_session_class; +static char * +escape (const gchar *text) +{ + size_t len; + size_t i, j; + int count = 0; + gchar *escaped; + + len = strlen (text); + + for (i = 0; i < len; i++) + if (text[i] == '\'') + count++; + + if (count == 0) + return g_strdup (text); + + escaped = g_malloc (len + count + 1); + + j = 0; + for (i = 0; i <= len; i++) { + if (text[i] == '\'') { + escaped[j] = '\\'; + j++; + } + escaped[j] = text[i]; + j++; + } + + return escaped; +} static JSValueRef get_user_name_cb(JSContextRef context, @@ -1059,6 +1090,7 @@ show_prompt_cb(LightDMGreeter *greeter, JSGlobalContextRef jsContext; JSStringRef command; gchar *string; + gchar *etext; const gchar *ct = ""; g_debug("Show prompt %s", text); @@ -1079,12 +1111,14 @@ show_prompt_cb(LightDMGreeter *greeter, break; } - string = g_strdup_printf ("show_prompt('%s', '%s')", text, ct); + etext = escape (text); + string = g_strdup_printf ("show_prompt('%s', '%s')", etext, ct); command = JSStringCreateWithUTF8CString(string); JSEvaluateScript(jsContext, command, NULL, NULL, 0, NULL); g_free(string); + g_free(etext); } } @@ -1099,6 +1133,7 @@ show_message_cb(LightDMGreeter *greeter, WebKitFrame *web_frame; JSGlobalContextRef jsContext; JSStringRef command; + gchar *etext; gchar *string; const gchar *mt = ""; @@ -1117,12 +1152,14 @@ show_message_cb(LightDMGreeter *greeter, break; } - string = g_strdup_printf ("show_prompt('%s', '%s')", text, mt); + etext = escape (text); + string = g_strdup_printf ("show_prompt('%s', '%s')", etext, mt); command = JSStringCreateWithUTF8CString(string); JSEvaluateScript(jsContext, command, NULL, NULL, 0, NULL); g_free(string); + g_free(etext); } }