RIFO: Add a test for bounds checking

This tests exactly one frame before and one frame after what
should be accepted to make sure those are rejected

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Change-Id: I048e1b8c2b918f7ca4b4327b89bf04430a2838bc
This commit is contained in:
Sylvain Munaut 2022-04-14 20:17:14 +00:00
parent 712d234ca4
commit 2c0af2fa98
2 changed files with 89 additions and 0 deletions

View File

@ -125,6 +125,46 @@ static void too_old_frames(void)
}
}
static void bound_check(void)
{
uint8_t frame[32];
struct frame_rifo rifo;
frame_rifo_init(&rifo);
rifo.next_out_fn = init_next_out_fn;
printf("\nTEST: %s, starting at FN: %u\n", __func__, init_next_out_fn);
// Put 1 frame and get it
memset(frame, 0xa5, sizeof(frame));
frame_rifo_in(&rifo, frame, init_next_out_fn);
frame_rifo_out(&rifo, frame);
// Put 11 frames at absolute frame numbers 791-801
const uint8_t in[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < sizeof(in); i++) {
memset(frame, in[i], sizeof(frame));
rifo_in(&rifo, frame, init_next_out_fn + in[i] + 791);
}
// Add frame at start offset
memset(frame, 0xa5, sizeof(frame));
rifo_in(&rifo, frame, init_next_out_fn);
// Skip the first 790 frames
for (int i = 0; i < 790; i++) {
memset(frame, 0xff, sizeof(frame));
// Note: frame_rifo_out instead of rifo_out
// (just to ignore the output)
frame_rifo_out(&rifo, frame);
}
// Try to read the 10 real frames
for (int i = 0; i < 10; i++) {
memset(frame, 0xff, sizeof(frame));
rifo_out(&rifo, frame);
}
}
void run_all_tests(void)
{
missing_frames(0);
@ -132,6 +172,7 @@ void run_all_tests(void)
reordered_in();
correct_order();
too_old_frames();
bound_check();
}
int main(int argc, char **argv)

View File

@ -99,6 +99,30 @@ RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
TEST: bound_check, starting at FN: 0
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 791)=0
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 792)=0
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 793)=0
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 794)=0
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 795)=0
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 796)=0
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 797)=0
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 798)=0
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 799)=0
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 800)=0
RIFO_IN(0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a, 801)=-34
RIFO_IN(a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5, 0)=-34
RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
TEST: missing_frames, starting at FN: 4294967290
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 4294967290)=0
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 4294967292)=0
@ -198,3 +222,27 @@ RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
TEST: bound_check, starting at FN: 4294967290
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 785)=0
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 786)=0
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 787)=0
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 788)=0
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 789)=0
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 790)=0
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 791)=0
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 792)=0
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 793)=0
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 794)=0
RIFO_IN(0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a, 795)=-34
RIFO_IN(a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5, 4294967290)=-34
RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0