commit ca9b3af8d94e1f5f91c83ac4830f9c9587ec424d
parent 923830ab9a175c2d3ed2f67a4638c86d5f03ccb1
Author: bit9tream <bit6tream@cock.li>
Date: Tue, 23 Jun 2020 15:35:00 +0300
'"' are now escaped in json output
Diffstat:
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/format.c b/format.c
@@ -3,6 +3,17 @@
#include "config.h"
#include "format.h"
+void escape_quotes(char *str, char *out) {
+ memset(out, 0, strlen(out));
+ while (*str) {
+ if (*str == '"')
+ strcat(out, "\\\"");
+ else
+ out[strlen(out)] = *str;
+ str++;
+ }
+}
+
void output_notification(gchar *app_name, guint32 replaces_id, gchar *app_icon,
gchar *summary, gchar *body, GVariant *actions, GVariant *hints,
gint32 timeout) {
@@ -28,17 +39,24 @@ void output_notification(gchar *app_name, guint32 replaces_id, gchar *app_icon,
sprintf(string, "%s%s%d%s%s%s%s", string, OUTPUT_DELIMITER,
timeout, OUTPUT_DELIMITER, summary, OUTPUT_DELIMITER, body);
#else
- sprintf(string, "{ \"app_name\": \"%s\"", app_name);
+ char *escaped_str = (char *)calloc(512, sizeof(char));
+ escape_quotes(app_name, escaped_str);
+ sprintf(string, "{ \"app_name\": \"%s\"", escaped_str);
#ifdef RECEIVE_APP_ICON
- sprintf(string, "%s, \"app_icon\": \"%s\"", string, app_icon);
+ escape_quotes(app_icon, escaped_str);
+ sprintf(string, "%s, \"app_icon\": \"%s\"", string, escaped_str);
#endif
#ifdef RECEIVE_REPLACES_ID
sprintf(string, "%s, \"replaces_id\": %lu", string, replaces_id);
#endif
- sprintf(string, "%s, \"timeout\": %d, \"summary\": \"%s\", \"body\": \"%s\" }", string, timeout, summary, body);
+ escape_quotes(summary, escaped_str);
+ sprintf(string, "%s, \"timeout\": %d, \"summary\": \"%s\"", string, timeout, escaped_str);
+
+ escape_quotes(body, escaped_str);
+ sprintf(string, "%s, \"body\": \"%s\" }", string, escaped_str);
#endif
@@ -46,4 +64,5 @@ void output_notification(gchar *app_name, guint32 replaces_id, gchar *app_icon,
fflush(stdout);
free(string);
+ free(escaped_str);
}