[Spice-devel] [PATCH spice-streaming-agent v5 2/2] Implement handling of error messages from the server
Uri Lublin
uril at redhat.com
Sun Mar 4 10:57:08 UTC 2018
On 03/04/2018 12:38 PM, Uri Lublin wrote:
> On 02/28/2018 02:53 PM, Lukáš Hrázký wrote:
>> Log error messages from the server to syslog (not aborting the agent).
>> Limits the messages to 1023 bytes, error messages from the server are
>> not expected to be longer. In the unlikely case the message is longer,
>> log the first 1023 bytes and throw an exception (because we don't read
>> out the rest of the message, causing desynchronization between the
>> server and the streaming agent).
>>
>> Signed-off-by: Lukáš Hrázký <lhrazky at redhat.com>
>> ---
>> src/spice-streaming-agent.cpp | 26 +++++++++++++++++++++++---
>> 1 file changed, 23 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/spice-streaming-agent.cpp
>> b/src/spice-streaming-agent.cpp
>> index ee57920..954d1b3 100644
>> --- a/src/spice-streaming-agent.cpp
>> +++ b/src/spice-streaming-agent.cpp
>> @@ -137,10 +137,30 @@ static void handle_stream_capabilities(uint32_t
>> len)
>> }
>> }
>> -static void handle_stream_error(uint32_t len)
>> +static void handle_stream_error(size_t len)
>> {
>> - // TODO read message and use it
>> - throw std::runtime_error("got an error message from server");
>> + if (len < sizeof(StreamMsgNotifyError)) {
>> + throw std::runtime_error("Received NotifyError message size "
>> + std::to_string(len) +
>> + " is too small (smaller than " +
>> +
>> std::to_string(sizeof(StreamMsgNotifyError)) + ")");
>> + }
>> +
>> + struct : StreamMsgNotifyError {
>> + uint8_t msg[1024];
>> + } msg;
>> +
>> + size_t len_to_read = std::min(len, sizeof(msg) - 1);
>> +
>> + read_all(&msg, len_to_read);
>> + msg.msg[len_to_read - sizeof(StreamMsgNotifyError)] = '\0';
>
> That looks wrong. It should be:
> msg.msg[len_to_read] = '\0';
> Otherwise, the end of the message (last 4 bytes) is cut out.
>
>
> After re-reading it, I realize there are two meanings to msg.msg:
> one from the definition above and one inherited.
After re-re-reading it, it seems the code is correct but confusing.
The local variable msg.msg and the inherited msg.msg point to the
same location in memory (after StreamMsgNotifyError.error_code).
Uri.
>
> Uri.
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
More information about the Spice-devel
mailing list