2
0
mirror of https://github.com/s1lentq/revoice.git synced 2024-10-16 22:46:48 +03:00

fixed vulnerable client-side attack via invalid voice packet

This commit is contained in:
s1lent 2019-10-17 03:06:51 +07:00
parent 15780dfcaf
commit 5f71fde202
2 changed files with 17 additions and 1 deletions

View File

@ -197,6 +197,12 @@ int VoiceEncoder_Opus::Decompress(const char *pCompressed, int compressedBytes,
break; break;
int nBytes = opus_decode(m_pDecoder, 0, 0, (opus_int16 *)pWritePos, FRAME_SIZE, 0); int nBytes = opus_decode(m_pDecoder, 0, 0, (opus_int16 *)pWritePos, FRAME_SIZE, 0);
if (nBytes <= 0)
{
// raw corrupted
return 0;
}
pWritePos += nBytes * 2; pWritePos += nBytes * 2;
} }
} }
@ -223,6 +229,11 @@ int VoiceEncoder_Opus::Decompress(const char *pCompressed, int compressedBytes,
} }
int nBytes = opus_decode(m_pDecoder, (const unsigned char *)pReadPos, nPayloadSize, (opus_int16 *)pWritePos, FRAME_SIZE, 0); int nBytes = opus_decode(m_pDecoder, (const unsigned char *)pReadPos, nPayloadSize, (opus_int16 *)pWritePos, FRAME_SIZE, 0);
if (nBytes <= 0)
{
// raw corrupted
return 0;
}
pReadPos += nPayloadSize; pReadPos += nPayloadSize;
pWritePos += nBytes * 2; pWritePos += nBytes * 2;

View File

@ -105,7 +105,12 @@ void SV_ParseVoiceData_emu(IGameClient *cl)
silkData = chReceived; silkDataLen = nDataLength; silkData = chReceived; silkDataLen = nDataLength;
speexData = transcodedBuf; speexData = transcodedBuf;
speexDataLen = TranscodeVoice(srcPlayer, silkData, silkDataLen, srcPlayer->GetOpusCodec(), srcPlayer->GetSpeexCodec(), transcodedBuf, sizeof(transcodedBuf));
int numDecodedSamples = TranscodeVoice(srcPlayer, silkData, silkDataLen, srcPlayer->GetOpusCodec(), srcPlayer->GetSpeexCodec(), transcodedBuf, sizeof(transcodedBuf));
if (numDecodedSamples <= 0)
return;
speexDataLen = numDecodedSamples;
break; break;
} }
case vct_speex: case vct_speex: