attempt to fix double free issue;

pull/12/head
Bryan Biedenkapp 4 years ago
parent 993f9f2419
commit 18c6e34729

@ -768,11 +768,23 @@ bool TrunkPacket::processMBT(DataHeader dataHeader, DataBlock* blocks)
bool ret = true;
for (uint32_t i = 0; i < dataHeader.getBlocksToFollow(); i++) {
bool decodeRet = m_rfTSBK.decodeMBT(dataHeader, blocks[i]);
bool decodeRet = true;
// get the raw block data
uint8_t raw[P25_PDU_UNCONFIRMED_LENGTH_BYTES];
uint32_t len = blocks[i].getData(raw);
if (len != P25_PDU_UNCONFIRMED_LENGTH_BYTES) {
LogError(LOG_P25, "TrunkPacket::processMBT(), failed to read PDU data block");
decodeRet = false;
}
if (decodeRet) {
process(data, 1U, true);
} else {
ret = false;
bool decodeRet = m_rfTSBK.decodeMBT(dataHeader, raw);
if (decodeRet) {
process(data, 1U, true);
} else {
ret = false;
}
}
}

@ -61,9 +61,7 @@ DataBlock::DataBlock() :
/// </summary>
DataBlock::~DataBlock()
{
if (m_data != NULL) {
delete[] m_data;
}
delete[] m_data;
}
/// <summary>

@ -182,16 +182,8 @@ TSBK& TSBK::operator=(const TSBK& data)
/// <param name="dataHeader"></param>
/// <param name="block"></param>
/// <returns>True, if TSBK was decoded, otherwise false.</returns>
bool TSBK::decodeMBT(const data::DataHeader dataHeader, data::DataBlock block)
bool TSBK::decodeMBT(const data::DataHeader dataHeader, const uint8_t* block)
{
// get the raw block data
uint8_t pduBlock[P25_PDU_UNCONFIRMED_LENGTH_BYTES];
uint32_t len = block.getData(pduBlock);
if (len != P25_PDU_UNCONFIRMED_LENGTH_BYTES) {
LogError(LOG_P25, "TSBK::decodeMBT(), failed to read PDU data block");
return false;
}
m_lco = dataHeader.getAMBTOpcode(); // LCO
m_lastBlock = true;
m_mfId = dataHeader.getMFId(); // Mfg Id.
@ -202,22 +194,22 @@ bool TSBK::decodeMBT(const data::DataHeader dataHeader, data::DataBlock block)
// combine bytes into rs value
tsbkValue = dataHeader.getAMBTField8();
tsbkValue = (tsbkValue << 8) + dataHeader.getAMBTField9();
tsbkValue = (tsbkValue << 8) + pduBlock[0U];
tsbkValue = (tsbkValue << 8) + pduBlock[1U];
tsbkValue = (tsbkValue << 8) + pduBlock[2U];
tsbkValue = (tsbkValue << 8) + pduBlock[3U];
tsbkValue = (tsbkValue << 8) + pduBlock[4U];
tsbkValue = (tsbkValue << 8) + pduBlock[5U];
tsbkValue = (tsbkValue << 8) + block[0U];
tsbkValue = (tsbkValue << 8) + block[1U];
tsbkValue = (tsbkValue << 8) + block[2U];
tsbkValue = (tsbkValue << 8) + block[3U];
tsbkValue = (tsbkValue << 8) + block[4U];
tsbkValue = (tsbkValue << 8) + block[5U];
} else {
// combine bytes into rs value
tsbkValue = pduBlock[0U];
tsbkValue = (tsbkValue << 8) + pduBlock[1U];
tsbkValue = (tsbkValue << 8) + pduBlock[2U];
tsbkValue = (tsbkValue << 8) + pduBlock[3U];
tsbkValue = (tsbkValue << 8) + pduBlock[4U];
tsbkValue = (tsbkValue << 8) + pduBlock[5U];
tsbkValue = (tsbkValue << 8) + pduBlock[6U];
tsbkValue = (tsbkValue << 8) + pduBlock[7U];
tsbkValue = block[0U];
tsbkValue = (tsbkValue << 8) + block[1U];
tsbkValue = (tsbkValue << 8) + block[2U];
tsbkValue = (tsbkValue << 8) + block[3U];
tsbkValue = (tsbkValue << 8) + block[4U];
tsbkValue = (tsbkValue << 8) + block[5U];
tsbkValue = (tsbkValue << 8) + block[6U];
tsbkValue = (tsbkValue << 8) + block[7U];
}
// Motorola P25 vendor opcodes

@ -78,7 +78,7 @@ namespace p25
TSBK& operator=(const TSBK& data);
/// <summary>Decode a alternate trunking signalling block.</summary>
bool decodeMBT(const data::DataHeader dataHeader, data::DataBlock block);
bool decodeMBT(const data::DataHeader dataHeader, const uint8_t* block);
/// <summary>Decode a trunking signalling block.</summary>
bool decode(const uint8_t* data);

Loading…
Cancel
Save

Powered by TurnKey Linux.