Skip to content

Commit 6d44659

Browse files
committed
cbor: improve error handling
1 parent d85df33 commit 6d44659

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

src/driver/dma.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "dma.h"
22

3+
#include <string.h>
4+
35
#include "core/project.h"
46
#include "util/cbor_helper.h"
57
#include "util/util.h"
@@ -75,6 +77,9 @@ cbor_result_t cbor_encode_dma_stream_t(cbor_value_t *enc, const dma_stream_t *d)
7577
cbor_result_t cbor_decode_target_dma_array(cbor_value_t *dec, target_dma_t (*dma)[DMA_DEVICE_MAX]) {
7678
cbor_result_t res = CBOR_OK;
7779

80+
memset(dma, 0, DMA_DEVICE_MAX * sizeof(target_dma_t));
81+
memset(dma_stream_map, 0, DMA_STREAM_MAX * sizeof(dma_device_t));
82+
7883
cbor_container_t map;
7984
CBOR_CHECK_ERROR(res = cbor_decode_map(dec, &map));
8085
for (uint32_t i = 0; i < cbor_decode_map_size(dec, &map); i++) {

src/util/cbor_helper.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ cbor_result_t cbor_handle_error(cbor_result_t err);
124124
for (uint32_t i = 0; i < min(size, cbor_decode_array_size(dec, &array)); i++) { \
125125
type tmp = {}; \
126126
CBOR_CHECK_ERROR(res = cbor_decode_##type(dec, &tmp)); \
127+
if (tmp.index >= size) { \
128+
CBOR_CHECK_ERROR(res = CBOR_ERR_OVERFLOW); \
129+
} \
127130
o->member[tmp.index] = tmp; \
128131
} \
129132
continue; \

0 commit comments

Comments
 (0)