From aa39f95f34bcf9fc0317a9b397aa0b43509fdfbc Mon Sep 17 00:00:00 2001 From: Isaac Suttell Date: Thu, 24 Jan 2019 12:46:51 -0800 Subject: [PATCH] added a catch for an out of range buffer --- node_rtmp_session.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/node_rtmp_session.js b/node_rtmp_session.js index a071ce7d..1a75d763 100644 --- a/node_rtmp_session.js +++ b/node_rtmp_session.js @@ -5,6 +5,7 @@ // const QueryString = require("querystring"); +const buffer = require('buffer'); const AV = require("./node_core_av"); const { AUDIO_SOUND_RATE, AUDIO_CODEC_NAME, VIDEO_CODEC_NAME } = require("./node_core_av"); @@ -351,10 +352,18 @@ class NodeRtmpSession { chunksOffset += chunkBasicHeader.length; chunkMessageHeader.copy(chunks, chunksOffset); chunksOffset += chunkMessageHeader.length; - if (useExtendedTimestamp) { + + // See https://github.com/illuspas/Node-Media-Server/issues/123 + const isOutofRange = (header.timestamp + chunksOffset) > buffer.constants.MAX_LENGTH; + if (isOutofRange) { + Logger.warn('header.timestamp is out of range of buffer -> header.timestamp = %s', header.timestamp + chunksOffset); + } + + if (useExtendedTimestamp && !isOutofRange) { chunks.writeUInt32BE(header.timestamp, chunksOffset); chunksOffset += 4; } + while (payloadSize > 0) { if (payloadSize > chunkSize) { payload.copy(chunks, chunksOffset, payloadOffset, payloadOffset + chunkSize);