From 2d158d449a769395c48ac50d3b981a5ec811eeeb Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Fri, 21 Aug 2020 14:28:29 +1000 Subject: [PATCH] Use double encoding for notify data --- lib/renderer/bridge/bridge.go | 11 +++++++++-- lib/renderer/webview.go | 9 ++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/renderer/bridge/bridge.go b/lib/renderer/bridge/bridge.go index e2004caac..f7afd14d3 100644 --- a/lib/renderer/bridge/bridge.go +++ b/lib/renderer/bridge/bridge.go @@ -152,12 +152,19 @@ func (h *Bridge) NotifyEvent(event *messages.EventData) error { // Marshall the data data, err = json.Marshal(event.Data) if err != nil { - h.log.Errorf("Cannot unmarshall JSON data in event: %s ", err.Error()) + h.log.Errorf("Cannot marshal JSON data in event: %s ", err.Error()) return err } } - message := "window.wails._.Notify('" + event.Name + "','" + string(data) + "')" + // Double encode data to ensure everything is escaped correctly. + data, err = json.Marshal(string(data)) + if err != nil { + h.log.Errorf("Cannot marshal JSON data in event: %s ", err.Error()) + return err + } + + message := "window.wails._.Notify('" + event.Name + "'," + string(data) + ")" dead := []*session{} for _, session := range h.sessions { err := session.evalJS(message, notifyMessage) diff --git a/lib/renderer/webview.go b/lib/renderer/webview.go index 6a27cdfef..e484f5e6a 100644 --- a/lib/renderer/webview.go +++ b/lib/renderer/webview.go @@ -329,7 +329,14 @@ func (w *WebView) NotifyEvent(event *messages.EventData) error { } } - message := fmt.Sprintf("wails._.Notify('%s','%s')", event.Name, data) + // Double encode data to ensure everything is escaped correctly. + data, err = json.Marshal(string(data)) + if err != nil { + w.log.Errorf("Cannot marshal JSON data in event: %s ", err.Error()) + return err + } + + message := "window.wails._.Notify('" + event.Name + "'," + string(data) + ")" return w.evalJS(message) }