mirror of
https://github.com/liquidraver/ZephCore.git
synced 2026-09-02 03:38:18 +00:00
more small security fixes
This commit is contained in:
+11
-2
@@ -260,12 +260,21 @@ DispatcherAction Mesh::onRecvPacket(Packet *pkt)
|
||||
if (pkt->getPayloadType() == PAYLOAD_TYPE_PATH) {
|
||||
int k = 0;
|
||||
uint8_t path_len = data[k++];
|
||||
if (!Packet::isValidPathLen(path_len)) {
|
||||
LOG_WRN("onRecvPacket: invalid inner path_len 0x%02x", path_len);
|
||||
break;
|
||||
}
|
||||
uint8_t hash_size = (path_len >> 6) + 1;
|
||||
uint8_t hash_count = path_len & 63;
|
||||
uint8_t *path = &data[k]; k += hash_size*hash_count;
|
||||
int path_bytes = hash_size * hash_count;
|
||||
if (k + path_bytes + 1 > len) {
|
||||
LOG_WRN("onRecvPacket: PATH payload truncated (k=%d path_bytes=%d len=%d)", k, path_bytes, len);
|
||||
break;
|
||||
}
|
||||
uint8_t *path = &data[k]; k += path_bytes;
|
||||
uint8_t extra_type = data[k++] & 0x0F;
|
||||
uint8_t *extra = &data[k];
|
||||
uint8_t extra_len = len - k;
|
||||
uint8_t extra_len = (uint8_t)(len - k);
|
||||
if (onPeerPathRecv(pkt, j, secret, path, path_len, extra_type, extra, extra_len)) {
|
||||
if (pkt->isRouteFlood()) {
|
||||
Packet *rpath = createPathReturn(&src_hash, secret, pkt->path, pkt->path_len, 0, nullptr, 0);
|
||||
|
||||
@@ -38,8 +38,8 @@ size_t Packet::writePath(uint8_t *dest, const uint8_t *src, uint8_t path_len)
|
||||
|
||||
uint8_t Packet::copyPath(uint8_t *dest, const uint8_t *src, uint8_t path_len)
|
||||
{
|
||||
writePath(dest, src, path_len);
|
||||
return path_len;
|
||||
size_t written = writePath(dest, src, path_len);
|
||||
return written > 0 ? path_len : 0;
|
||||
}
|
||||
|
||||
int Packet::getRawLength() const
|
||||
|
||||
Reference in New Issue
Block a user