diff --git a/td/telegram/NotificationManager.cpp b/td/telegram/NotificationManager.cpp index f9f9ba0e..b869b5cd 100644 --- a/td/telegram/NotificationManager.cpp +++ b/td/telegram/NotificationManager.cpp @@ -2364,7 +2364,10 @@ Result NotificationManager::decrypt_push_payload(int64 encryption_key_id if (result.type() != mtproto::Transport::ReadResult::Packet) { return Status::Error(400, "Wrong packet type"); } - return result.packet().str(); + if (result.packet().size() < 4) { + return Status::Error(400, "Packet is too small"); + } + return result.packet().substr(4).str(); } void NotificationManager::before_get_difference() { diff --git a/test/mtproto.cpp b/test/mtproto.cpp index f9c7a7c2..ef6384ef 100644 --- a/test/mtproto.cpp +++ b/test/mtproto.cpp @@ -448,8 +448,8 @@ TEST(Mtproto, notifications) { "H0yJkEMoKRgaF9NaYI4u26oIQ-Ez46kTVU-R7e3acdofOJKm7HIKan_5ZMg82Dvec2M6vc_" "I54Vs28iBx8IbBO1y5z9WSScgW3JCvFFKP2MXIu7Jow5-cpUx6jXdzwRUb9RDApwAFKi45zpv8eb3uPCDAmIQ"; vector decrypted_payloads = { - "fwAAAHsibG9jX2tleSI6Ik1FU1NBR0VfVEVYVCIsImxvY19hcmdzIjpbIkFyc2VueSBTbWlybm92IiwiYWJjZGVmZyJdLCJjdXN0b20iOnsibXNn" - "X2lkIjoiNTkwMDQ3IiwiZnJvbV9pZCI6IjYyODE0In0sImJhZGdlIjoiNDA5In0", + "eyJsb2Nfa2V5IjoiTUVTU0FHRV9URVhUIiwibG9jX2FyZ3MiOlsiQXJzZW55IFNtaXJub3YiLCJhYmNkZWZnIl0sImN1c3RvbSI6eyJtc2dfaWQi" + "OiI1OTAwNDciLCJmcm9tX2lkIjoiNjI4MTQifSwiYmFkZ2UiOiI0MDkifQ", "eyJsb2Nfa2V5IjoiIiwibG9jX2FyZ3MiOltdLCJjdXN0b20iOnsiY2hhbm5lbF9pZCI6IjExNzY4OTU0OTciLCJtYXhfaWQiOiIxMzU5In0sImJh" "ZGdlIjoiMCJ9"}; key = base64url_decode(key).move_as_ok();