diff --git a/src/CoreParser.php b/src/CoreParser.php index f5fe732..a336f01 100644 --- a/src/CoreParser.php +++ b/src/CoreParser.php @@ -105,14 +105,20 @@ class CoreParser { $m->pub_key = base64_encode(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE)); if( strlen($payload) > CoreProtocol::PUB_KEY_SIZE + 2 ) { - $m->type = ord($payload[33]); - $m->flags = ord($payload[34]); - $m->out_path = substr($payload, 35, CoreProtocol::MAX_PATH_SIZE); - $m->name = substr($payload, 99, 32); - $m->last_advert_time = unpack('V', substr($payload, 203, 4))[1]; - $m->lat = unpack('V', substr($payload, 207, 4))[1]; - $m->lon = unpack('V', substr($payload, 211, 4))[1]; - $m->last_mod = unpack('V', substr($payload, 215, 4))[1]; + try { + $m->type = ord($payload[33]); + $m->flags = ord($payload[34]); + $m->out_path = substr($payload, 35, CoreProtocol::MAX_PATH_SIZE); + $m->name = substr($payload, 99, 32); + $m->last_advert_time = unpack('V', substr($payload, 203, 4))[1]; + $m->lat = unpack('V', substr($payload, 207, 4))[1]; + $m->lon = unpack('V', substr($payload, 211, 4))[1]; + $m->last_mod = unpack('V', substr($payload, 215, 4))[1]; + } + catch(\Throwable $t) { + // hidden problem? packet wasn't long enough so we'll just be missing data i suppose + error_log("Tried to decode Advert but packet too small. Packet size: " . strlen($payload) . " and expected 215.."); + } } return $m;