From 64f220fb5013d2d28a0bc9b96f506c413f7a0004 Mon Sep 17 00:00:00 2001 From: Heilig Benedek Date: Mon, 1 Aug 2016 02:14:11 +0200 Subject: [PATCH] fix UTF character sending as suggested by @zcbenz --- .../native_mate_converters/blink_converter.cc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/atom/common/native_mate_converters/blink_converter.cc b/atom/common/native_mate_converters/blink_converter.cc index c74715be86..7a72219416 100644 --- a/atom/common/native_mate_converters/blink_converter.cc +++ b/atom/common/native_mate_converters/blink_converter.cc @@ -4,6 +4,7 @@ #include "atom/common/native_mate_converters/blink_converter.h" +#include #include #include @@ -175,11 +176,18 @@ bool Converter::FromV8( out->modifiers |= blink::WebInputEvent::ShiftKey; out->setKeyIdentifierFromWindowsKeyCode(); if ((out->type == blink::WebInputEvent::Char || - out->type == blink::WebInputEvent::RawKeyDown) && - str.size() <= 2) { - base::string16 code = base::UTF8ToUTF16(str); - out->text[0] = code[0]; - out->unmodifiedText[0] = code[0]; + out->type == blink::WebInputEvent::RawKeyDown)) { + // Make sure to not read beyond the buffer in case some bad code doesn't + // NULL-terminate it (this is called from plugins). + size_t text_length_cap = blink::WebKeyboardEvent::textLengthCap; + base::string16 text16 = base::UTF8ToUTF16(str); + + memset(out->text, 0, text_length_cap); + memset(out->unmodifiedText, 0, text_length_cap); + for (size_t i = 0; i < std::min(text_length_cap, text16.size()); ++i) { + out->text[i] = text16[i]; + out->unmodifiedText[i] = text16[i]; + } } return true; }