diff options
Diffstat (limited to 'protocols/WhatsAppWeb/src/noise.cpp')
-rw-r--r-- | protocols/WhatsAppWeb/src/noise.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
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) |