From 96b7e711d06d0a673daf76a12c2bff4de14b0502 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 28 Sep 2022 19:58:47 +0300 Subject: WhatsApp: fix for the binary nodes decoding --- protocols/WhatsAppWeb/src/noise.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'protocols/WhatsAppWeb/src/noise.cpp') diff --git a/protocols/WhatsAppWeb/src/noise.cpp b/protocols/WhatsAppWeb/src/noise.cpp index d5d891d878..5c4037b61f 100644 --- a/protocols/WhatsAppWeb/src/noise.cpp +++ b/protocols/WhatsAppWeb/src/noise.cpp @@ -198,15 +198,29 @@ MBinBuffer WANoise::decrypt(const void *pData, size_t cbLen) return res; } -MBinBuffer WANoise::decodeFrame(const void *pData, size_t cbLen) +size_t WANoise::decodeFrame(const void *&pData, size_t &cbLen) { - if (!bInitFinished) { - MBinBuffer res; - res.assign(pData, cbLen); - return res; + auto *p = (const uint8_t *)pData; + + if (cbLen < 3) + return 0; + + size_t payloadLen = 0; + for (int i = 0; i < 3; i++) { + payloadLen <<= 8; + payloadLen += p[i]; + } + + ppro->debugLogA("got payload of size %d", payloadLen); + + cbLen -= 3; + if (payloadLen > cbLen) { + ppro->debugLogA("payload length %d exceeds capacity %d", payloadLen, cbLen); + return 0; } - return decrypt(pData, cbLen); + pData = p + 3; + return payloadLen; } MBinBuffer WANoise::encodeFrame(const void *pData, size_t cbLen) -- cgit v1.2.3