diff options
author | George Hazan <ghazan@miranda.im> | 2022-09-28 19:58:47 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-09-28 19:59:04 +0300 |
commit | 96b7e711d06d0a673daf76a12c2bff4de14b0502 (patch) | |
tree | 06f402f16839b7c4e5de669bc63541957431dbc6 /protocols/WhatsAppWeb/src/noise.cpp | |
parent | f53bb5a7dd0568d7849b224db568e380bc147a76 (diff) |
WhatsApp: fix for the binary nodes decoding
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) |