From 7ac7bd2edb51b4eda918bb1d7e9f167570ff4c8a Mon Sep 17 00:00:00 2001 From: tastytea Date: Sun, 22 Sep 2019 21:59:46 +0200 Subject: [PATCH] Make reading input in wrapper more robust. We read the size of the message now instead of getting everything between quotes. --- .../native-wrapper/remwharead_wrapper.cpp | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/browser-plugins/webextension/native-wrapper/remwharead_wrapper.cpp b/browser-plugins/webextension/native-wrapper/remwharead_wrapper.cpp index 5972644..e1aadd0 100644 --- a/browser-plugins/webextension/native-wrapper/remwharead_wrapper.cpp +++ b/browser-plugins/webextension/native-wrapper/remwharead_wrapper.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include using std::string; @@ -31,36 +32,34 @@ namespace fs = std::experimental::filesystem; const string read_input() { + // Read message length. + uint32_t length; + char buffer[4]; + + cin.read(buffer, sizeof(uint32_t)); + std::memcpy(&length, buffer, 4); + + // Ignore quotes. + length -= 2; + cin.ignore(1); + + // Read message. string input; char c; - bool start = false; - while (cin.read(&c, 1).good()) + for (; length > 0; --length) { - if (!start) - { - if (c == '"') - { - start = true; - } - continue; - } - if (c != '"') - { - input += c; - } - else - { - break; - } + cin.read(&c, 1); + input += c; } + return input; } void send_message(const string &message) { uint32_t length = message.length() + 2; - cout.write(reinterpret_cast(&length), sizeof(length)); + cout.write(reinterpret_cast(&length), sizeof(uint32_t)); cout << '"' << message << '"'; }