Skip to content

Commit 3b56ea9

Browse files
Merge pull request scsd-cdh#98 from scsd-cdh/fix/misc
Fixes buffer corruption in ASN1_LFP_SERIALIZE_BUF
2 parents c936179 + 8d35311 commit 3b56ea9

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

MIDDLEWARE/ASN1SCC/asn1_lfp.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,19 +72,21 @@ static struct {
7272
* @return true on success, false on error (see ASN1_LFP_ERROR_CODE)
7373
*/
7474
#define ASN1_LFP_SERIALIZE_BUF(INITIATOR, TARGET, TYPE, P_WRITE_CB, P_CTX, ...) \
75-
({ \
75+
({ \
7676
/*Reset last error*/ \
7777
asn1_lfp_last_error.lfp = 0; \
7878
asn1_lfp_last_error.asn1 = 0; \
7979
\
8080
/*Setup serialized but unencoded buffer*/ \
8181
const TYPE payload = __VA_ARGS__; \
82+
const uint16_t asn1_size = TYPE ## _REQUIRED_BYTES_FOR_ENCODING; \
8283
unsigned char payload_buffer[ \
83-
LFP_HEADER_SIZE + LFP_ENCODED_BODY_LENGTH_APPROX(TYPE ## _REQUIRED_BYTES_FOR_ENCODING) \
84+
LFP_HEADER_SIZE + LFP_ENCODED_BODY_LENGTH_APPROX(asn1_size) \
8485
]; \
86+
unsigned char * p_asn1_payload = payload_buffer + sizeof(payload_buffer) - asn1_size; \
8587
/*Prepare encoder*/ \
8688
BitStream encoder; \
87-
BitStream_Init(&encoder, payload_buffer, sizeof(payload_buffer)); \
89+
BitStream_Init(&encoder, p_asn1_payload, asn1_size); \
8890
\
8991
const uint8_t endpoint = (lfpId ## TYPE); \
9092
\
@@ -95,7 +97,7 @@ static struct {
9597
TARGET, \
9698
endpoint & 0xFE, \
9799
endpoint & 0x01, \
98-
payload_buffer, \
100+
p_asn1_payload, \
99101
BitStream_GetLength(&encoder), \
100102
payload_buffer, \
101103
sizeof(payload_buffer) \

0 commit comments

Comments
 (0)