You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I defined a uint8 type: Uint8 ::= INTEGER (0..255) and got:
flag Uint8_XER_Decode_aux(Uint8* pVal, const char* xmlTag, ByteStream* pByteStrm, int* pErrCode)
{
flag ret = TRUE;
(void)pVal;
(void)xmlTag;
(void)pByteStrm;
(void)pErrCode;
ret = Xer_DecodePosInteger(pByteStrm, xmlTag, pVal, pErrCode);
ret = true;
*pErrCode = ret ? 0 : ERR_XER_DECODE_UINT8;
return ret;
}
This generated code assigns an asn1SccUint to the address of a uint8.
This causes a warning (breaking the automated test cases) and causes Uint8_XER_Decode_aux to write past the end of the uint8. When on the stack, this unexpectedly modifies the variable below it on the stack!
foo.c: In function ‘Uint8_XER_Decode_aux’:
foo.c:460:48: warning: passing argument 3 of ‘Xer_DecodePosInteger’ from incompatible pointer type [-Wincompatible-pointer-types]
ret = Xer_DecodePosInteger(pByteStrm, xmlTag, pVal, pErrCode);
^~~~
A more correct solution is to follow the approach of BitStream_DecodeConstraintPosWholeNumberUInt8: use an asn1SccSint stack variable to temporarily hold the result before casting to the smaller type.
flag Uint8_XER_Decode_aux(Uint8* pVal, const char* xmlTag, ByteStream* pByteStrm, int* pErrCode)
{
flag ret = TRUE;
asn1SccSint val;
(void)pVal;
(void)xmlTag;
(void)pByteStrm;
(void)pErrCode;
ret = Xer_DecodeInteger(pByteStrm, xmlTag, &val, pErrCode);
*pVal = (Uint8)val;
*pErrCode = ret ? 0 : ERR_XER_DECODE_SINT8;
return ret;
}
This would fix both the warning and the bug.
The text was updated successfully, but these errors were encountered:
When using
-slim
with XML, decoding is broken.I defined a uint8 type:
Uint8 ::= INTEGER (0..255)
and got:This generated code assigns an
asn1SccUint
to the address of a uint8.This causes a warning (breaking the automated test cases) and causes
Uint8_XER_Decode_aux
to write past the end of theuint8
. When on the stack, this unexpectedly modifies the variable below it on the stack!A more correct solution is to follow the approach of
BitStream_DecodeConstraintPosWholeNumberUInt8
: use anasn1SccSint
stack variable to temporarily hold the result before casting to the smaller type.This would fix both the warning and the bug.
The text was updated successfully, but these errors were encountered: