From 938e9c75301e909ff402f5750329fe02fc282d15 Mon Sep 17 00:00:00 2001 From: Robert Sipka Date: Thu, 25 Apr 2019 13:43:33 +0200 Subject: [PATCH] [Debugger] Fixes the processing methods of incoming part messages (#2840) JerryScript-DCO-1.0-Signed-off-by: Robert Sipka rsipka.uszeged@partner.samsung.com --- jerry-core/debugger/debugger.c | 2 ++ jerry-ext/debugger/debugger-rp.c | 35 ++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/jerry-core/debugger/debugger.c b/jerry-core/debugger/debugger.c index de903128d..2008dc6e9 100644 --- a/jerry-core/debugger/debugger.c +++ b/jerry-core/debugger/debugger.c @@ -1115,6 +1115,8 @@ jerry_debugger_receive (jerry_debugger_uint8_data_t **message_data_p) /**< [out] if (context.message_p == NULL) { + JERRY_CONTEXT (debugger_received_length) = (uint16_t) context.received_length; + if (expected_message_type != 0) { jerry_debugger_transport_sleep (); diff --git a/jerry-ext/debugger/debugger-rp.c b/jerry-ext/debugger/debugger-rp.c index 9edcf9d2b..08078732d 100644 --- a/jerry-ext/debugger/debugger-rp.c +++ b/jerry-ext/debugger/debugger-rp.c @@ -86,16 +86,37 @@ jerryx_debugger_rp_receive (jerry_debugger_transport_header_t *header_p, /**< he return true; } - JERRYX_ASSERT (receive_context_p->message_length >= sizeof (jerryx_rawpacket_receive_header_t)); - - uint8_t *message_p = receive_context_p->message_p; - size_t message_length = (size_t) (message_p[0]); - size_t message_total_length = receive_context_p->message_total_length; + if (message_total_length == 0) + { + /* Byte stream. */ + if (receive_context_p->message_length < sizeof (jerryx_rawpacket_receive_header_t)) + { + receive_context_p->message_p = NULL; + return true; + } + } + else + { + /* Datagram packet. */ + JERRYX_ASSERT (receive_context_p->message_length >= sizeof (jerryx_rawpacket_receive_header_t)); + } + + uint8_t *message_p = receive_context_p->message_p; + size_t message_length = (size_t) (message_p[0]); + if (message_total_length == 0) { size_t new_total_length = message_length + sizeof (jerryx_rawpacket_receive_header_t); + + /* Byte stream. */ + if (receive_context_p->message_length < new_total_length) + { + receive_context_p->message_p = NULL; + return true; + } + receive_context_p->message_total_length = new_total_length; } else @@ -104,9 +125,7 @@ jerryx_debugger_rp_receive (jerry_debugger_transport_header_t *header_p, /**< he JERRYX_ASSERT (receive_context_p->message_length == (message_length + sizeof (jerryx_rawpacket_receive_header_t))); } - message_p += sizeof (jerryx_rawpacket_receive_header_t); - - receive_context_p->message_p = message_p; + receive_context_p->message_p = message_p + sizeof (jerryx_rawpacket_receive_header_t); receive_context_p->message_length = message_length; return true;