aboutsummaryrefslogtreecommitdiff
path: root/test/callbacks_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/callbacks_test.c')
-rw-r--r--test/callbacks_test.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/callbacks_test.c b/test/callbacks_test.c
index d9e90195c819..65c5d37f4399 100644
--- a/test/callbacks_test.c
+++ b/test/callbacks_test.c
@@ -371,6 +371,30 @@ static void test_invalid_indef_break(void** _CBOR_UNUSED(_state)) {
assert_true(res.error.code == CBOR_ERR_SYNTAXERROR);
}
+static void test_invalid_state_indef_break(void** _CBOR_UNUSED(_state)) {
+ struct _cbor_stack stack = _cbor_stack_init();
+ assert_non_null(_cbor_stack_push(&stack, cbor_new_int8(), /*subitems=*/0));
+ struct _cbor_decoder_context context = {
+ .creation_failed = false,
+ .syntax_error = false,
+ .root = NULL,
+ .stack = &stack,
+ };
+
+ cbor_builder_indef_break_callback(&context);
+
+ assert_false(context.creation_failed);
+ assert_true(context.syntax_error);
+ assert_size_equal(context.stack->size, 1);
+ // The stack remains unchanged
+ cbor_item_t* small_int = stack.top->item;
+ assert_size_equal(cbor_refcount(small_int), 1);
+ assert_true(cbor_isa_uint(small_int));
+
+ cbor_decref(&small_int);
+ _cbor_stack_pop(&stack);
+}
+
int main(void) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_default_callbacks),
@@ -388,6 +412,7 @@ int main(void) {
cmocka_unit_test(test_append_array_failure),
cmocka_unit_test(test_append_map_failure),
cmocka_unit_test(test_invalid_indef_break),
+ cmocka_unit_test(test_invalid_state_indef_break),
};
cmocka_run_group_tests(tests, NULL, NULL);