From 6cec5ff8f32403654d08d817dd3658c9fcc44f40 Mon Sep 17 00:00:00 2001 From: Bright Life Date: Sun, 24 May 2026 23:39:34 +0300 Subject: [PATCH] fixed crash of out-of-bounds Buffer() access with malformed requests: RangeError [ERR_BUFFER_OUT_OF_BOUNDS]: Attempt to access memory outside buffer bounds at boundsError (node:internal/buffer:90:11) at readUInt8 (node:internal/buffer:258:5) at Buffer. (node:internal/buffer:1009:47) at BufferReader.read (/home/lif/lif-kernel/node_modules/dns2/lib/reader.js:38:24) at BufferReader.read (/home/lif/lif-kernel/node_modules/dns2/lib/reader.js:48:28) at Packet.Header.parse (/home/lif/lif-kernel/node_modules/dns2/packet.js:214:22) at Packet.parse (/home/lif/lif-kernel/node_modules/dns2/packet.js:116:33) at Server.handle (/home/lif/lif-kernel/node_modules/dns2/server/tcp.js:15:28) at process.processTicksAndRejections (node:internal/process/task_queues:104:5) { code: 'ERR_BUFFER_OUT_OF_BOUNDS' --- packet.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packet.js b/packet.js index 819c6ed..b346d69 100644 --- a/packet.js +++ b/packet.js @@ -148,7 +148,12 @@ Packet.uuid = function() { Packet.parse = function(buffer) { const packet = new Packet(); const reader = new Packet.Reader(buffer); - packet.header = Packet.Header.parse(reader); + try { + packet.header = Packet.Header.parse(reader); + } catch(e){ + debug('node-dns > parse %s error', 'parse', e.message); + return packet; + } ([ // props parser count [ 'questions', Packet.Question, packet.header.qdcount ], [ 'answers', Packet.Resource, packet.header.ancount ],