Skip to content

Commit 4f898c5

Browse files
committed
Message size checking in libfec RS decoder
This fixes a bug with the ESEO decoder. The RS decoder crashed giving std::bad_alloc when it was passed a very short message.
1 parent c6d1329 commit 4f898c5

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

lib/decode_rs_general_impl.cc

+6-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,12 @@ namespace gr {
9494
int frame_len = pmt::length(msg);
9595
size_t offset(0);
9696

97-
assert(frame_len <= MAX_FRAME_LEN);
97+
if (frame_len <= d_nroots || frame_len > MAX_FRAME_LEN) {
98+
if (d_verbose) {
99+
std::printf("Reed-Solomon decoder: invalid frame length %d\n", frame_len);
100+
return;
101+
}
102+
}
98103

99104
memset(data, 0, sizeof(data));
100105
memcpy(data, pmt::uniform_vector_elements(msg, offset), frame_len);

lib/decode_rs_impl.cc

+7-2
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,13 @@ namespace gr {
8989
int frame_len = pmt::length(msg);
9090
size_t offset(0);
9191

92-
assert(frame_len <= MAX_FRAME_LEN);
93-
92+
if (frame_len <= 32 || frame_len > MAX_FRAME_LEN) {
93+
if (d_verbose) {
94+
std::printf("Reed-Solomon decoder: invalid frame length %d\n", frame_len);
95+
return;
96+
}
97+
}
98+
9499
memcpy(data, pmt::uniform_vector_elements(msg, offset), frame_len);
95100

96101
if (d_basis == BASIS_CONVENTIONAL) {

0 commit comments

Comments
 (0)