wsd/ClientSession.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)
New commits: commit fd607d3ba878b7317b6f3efe628ed553f4531bee Author: Jan Holesovsky <ke...@collabora.com> Date: Wed Sep 27 10:15:30 2017 +0200 Don't crash when the parameters are missing. Change-Id: I96ace7ad7757e7e0c74dd9f361c78ecff6171a96 Reviewed-on: https://gerrit.libreoffice.org/42854 Reviewed-by: pranavk <pran...@collabora.co.uk> Tested-by: pranavk <pran...@collabora.co.uk> diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp index ce4ed3a6..b5e78b7e 100644 --- a/wsd/ClientSession.cpp +++ b/wsd/ClientSession.cpp @@ -63,7 +63,7 @@ bool ClientSession::_handleInput(const char *buffer, int length) { LOG_TRC(getName() << ": handling incoming [" << getAbbreviatedMessage(buffer, length) << "]."); const std::string firstLine = getFirstLine(buffer, length); - const auto tokens = LOOLProtocol::tokenize(firstLine.data(), firstLine.size()); + const std::vector<std::string> tokens = LOOLProtocol::tokenize(firstLine.data(), firstLine.size()); auto docBroker = getDocumentBroker(); if (!docBroker) @@ -83,6 +83,12 @@ bool ClientSession::_handleInput(const char *buffer, int length) if (tokens[0] == "loolclient") { + if (tokens.size() < 1) + { + sendTextFrame("error: cmd=loolclient kind=badprotocolversion"); + return false; + } + const auto versionTuple = ParseVersion(tokens[1]); if (std::get<0>(versionTuple) != ProtocolMajorVersionNumber || std::get<1>(versionTuple) != ProtocolMinorVersionNumber) @@ -216,14 +222,20 @@ bool ClientSession::_handleInput(const char *buffer, int length) { int dontTerminateEdit = 1; int dontSaveIfUnmodified = 1; - getTokenInteger(tokens[1], "dontTerminateEdit", dontTerminateEdit); - getTokenInteger(tokens[2], "dontSaveIfUnmodified", dontSaveIfUnmodified); + if (tokens.size() > 1) + getTokenInteger(tokens[1], "dontTerminateEdit", dontTerminateEdit); + + if (tokens.size() > 2) + getTokenInteger(tokens[2], "dontSaveIfUnmodified", dontSaveIfUnmodified); + docBroker->sendUnoSave(getId(), dontTerminateEdit != 0, dontSaveIfUnmodified != 0); } else if (tokens[0] == "savetostorage") { int force = 0; - getTokenInteger(tokens[1], "force", force); + if (tokens.size() > 1) + getTokenInteger(tokens[1], "force", force); + if (docBroker->saveToStorage(getId(), true, "" /* This is irrelevant when success is true*/, true)) { docBroker->broadcastMessage("commandresult: { \"command\": \"savetostorage\", \"success\": true }"); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits