diff options
author | Simon Rozman <simon@rozman.si> | 2020-11-09 11:46:17 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-11-10 17:35:01 +0100 |
commit | f9c1c9dcdde3ea52e823bb762a7207551c132069 (patch) | |
tree | a6ccc49584dd4a5d43c4a490a38ac9d542880c4e | |
parent | installer: enable ARM MSI building (diff) | |
download | wireguard-windows-f9c1c9dcdde3ea52e823bb762a7207551c132069.tar.xz wireguard-windows-f9c1c9dcdde3ea52e823bb762a7207551c132069.zip |
syntax: trim the text returned by EM_GETTEXTEX
The RichEdit's GETTEXTLENGTHEX returns bigger text length estimate than
EM_GETTEXTEX returns. This results in trailing null characters. While
CGo variant of the highlighter had a C-natural way of stopping before
null-terminator character(s), Go strings don't.
Note that documentation says EM_GETTEXTEX returns number of characters
including null-terminator, it was observed that RichEdit control's
implementation of EM_GETTEXTEX returns number of characters excluding
null-terminator.
Signed-off-by: Simon Rozman <simon@rozman.si>
-rw-r--r-- | ui/syntax/syntaxedit.go | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/ui/syntax/syntaxedit.go b/ui/syntax/syntaxedit.go index b689d921..a479649a 100644 --- a/ui/syntax/syntaxedit.go +++ b/ui/syntax/syntaxedit.go @@ -208,10 +208,11 @@ func (se *SyntaxEdit) highlightText() error { Cb: msgSize + 1, } msg := make([]byte, msgSize+1) - if win.SendMessage(hWnd, win.EM_GETTEXTEX, uintptr(unsafe.Pointer(&gettextex)), uintptr(unsafe.Pointer(&msg[0]))) <= 0 { + msgCount := win.SendMessage(hWnd, win.EM_GETTEXTEX, uintptr(unsafe.Pointer(&gettextex)), uintptr(unsafe.Pointer(&msg[0]))) + if msgCount < 0 { return errors.New("Failed to get text") } - cfg := strings.Replace(string(msg), "\r", "\n", -1) + cfg := strings.Replace(string(msg[:msgCount]), "\r", "\n", -1) spans := highlightConfig(cfg) se.evaluateUntunneledBlocking(cfg, spans) |