mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-02-25 09:11:28 -05:00
Fix subtle bug in tlv deserialization of TLV_TYPE_KEYSIGNATURETYPE
When using -O2, the variable currType is optimized out, so the signature is added with the wrong sign type. Then when verifying the data the signature is not found and verification fails. The main sympton of this bug was receiving no more forum/channel posts. Wit debug builds (-O0) this worked, that's why not every one was affected by this. This bug was introduced in 2012 (19e856c2a8eb56c5e43e977aac27a3dbc79ab2d0)
This commit is contained in:
parent
c3fff39624
commit
3cfe69787f
@ -649,7 +649,6 @@ bool RsTlvKeySignatureSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
|||||||
|
|
||||||
/* get the next type */
|
/* get the next type */
|
||||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||||
SignType currType;
|
|
||||||
|
|
||||||
switch(tlvsubtype)
|
switch(tlvsubtype)
|
||||||
{
|
{
|
||||||
@ -659,16 +658,13 @@ bool RsTlvKeySignatureSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
|||||||
ok &= sign.GetTlv(data, size, offset);
|
ok &= sign.GetTlv(data, size, offset);
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
keySignSet[currType] = sign;
|
keySignSet[sign_type] = sign;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TLV_TYPE_KEYSIGNATURETYPE:
|
case TLV_TYPE_KEYSIGNATURETYPE:
|
||||||
{
|
{
|
||||||
ok = GetTlvUInt32(data, size, offset, TLV_TYPE_KEYSIGNATURETYPE, &sign_type);
|
ok = GetTlvUInt32(data, size, offset, TLV_TYPE_KEYSIGNATURETYPE, &sign_type);
|
||||||
|
|
||||||
if(ok)
|
|
||||||
currType = sign_type;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user