Path: blob/main/contrib/libcbor/test/cbor_stream_decode_test.c
39534 views
/*1* Copyright (c) 2014-2020 Pavel Kalvoda <[email protected]>2*3* libcbor is free software; you can redistribute it and/or modify4* it under the terms of the MIT license. See LICENSE for details.5*/67#include "assertions.h"8#include "cbor.h"9#include "stream_expectations.h"1011static void test_no_data(void **_CBOR_UNUSED(_state)) {12assert_decoder_result_nedata(1, decode(NULL, 0));13}1415unsigned char embedded_uint8_data[] = {0x00, 0x01, 0x05, 0x17};16static void test_uint8_embedded_decoding(void **_CBOR_UNUSED(_state)) {17assert_uint8_eq(0);18assert_decoder_result(1, CBOR_DECODER_FINISHED,19decode(embedded_uint8_data, 1));2021assert_uint8_eq(1);22assert_decoder_result(1, CBOR_DECODER_FINISHED,23decode(embedded_uint8_data + 1, 1));2425assert_uint8_eq(5);26assert_decoder_result(1, CBOR_DECODER_FINISHED,27decode(embedded_uint8_data + 2, 1));2829assert_uint8_eq(23);30assert_decoder_result(1, CBOR_DECODER_FINISHED,31decode(embedded_uint8_data + 3, 1));32}3334unsigned char uint8_data[] = {0x18, 0x83, 0x18, 0xFF};35static void test_uint8_decoding(void **_CBOR_UNUSED(_state)) {36assert_uint8_eq(0x83);37assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(uint8_data, 2));3839assert_uint8_eq(0xFF);40assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(uint8_data + 2, 2));4142assert_minimum_input_size(2, uint8_data);43}4445unsigned char uint16_data[] = {0x19, 0x01, 0xf4};46static void test_uint16_decoding(void **_CBOR_UNUSED(_state)) {47assert_uint16_eq(500);48assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(uint16_data, 3));4950assert_minimum_input_size(3, uint16_data);51}5253unsigned char uint32_data[] = {0x1a, 0xa5, 0xf7, 0x02, 0xb3};54static void test_uint32_decoding(void **_CBOR_UNUSED(_state)) {55assert_uint32_eq((uint32_t)2784428723UL);56assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(uint32_data, 5));5758assert_minimum_input_size(5, uint32_data);59}6061unsigned char uint64_data[] = {0x1b, 0xa5, 0xf7, 0x02, 0xb3,620xa5, 0xf7, 0x02, 0xb3};63static void test_uint64_decoding(void **_CBOR_UNUSED(_state)) {64assert_uint64_eq(11959030306112471731ULL);65assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(uint64_data, 9));6667assert_minimum_input_size(9, uint64_data);68}6970unsigned char embedded_negint8_data[] = {0x20, 0x21, 0x25, 0x37};71static void test_negint8_embedded_decoding(void **_CBOR_UNUSED(_state)) {72assert_negint8_eq(0);73assert_decoder_result(1, CBOR_DECODER_FINISHED,74decode(embedded_negint8_data, 1));7576assert_negint8_eq(1);77assert_decoder_result(1, CBOR_DECODER_FINISHED,78decode(embedded_negint8_data + 1, 1));7980assert_negint8_eq(5);81assert_decoder_result(1, CBOR_DECODER_FINISHED,82decode(embedded_negint8_data + 2, 1));8384assert_negint8_eq(23);85assert_decoder_result(1, CBOR_DECODER_FINISHED,86decode(embedded_negint8_data + 3, 1));87}8889unsigned char negint8_data[] = {0x38, 0x83, 0x38, 0xFF};90static void test_negint8_decoding(void **_CBOR_UNUSED(_state)) {91assert_negint8_eq(0x83);92assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(negint8_data, 2));9394assert_negint8_eq(0xFF);95assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(negint8_data + 2, 2));9697assert_minimum_input_size(2, negint8_data);98}99100unsigned char negint16_data[] = {0x39, 0x01, 0xf4};101static void test_negint16_decoding(void **_CBOR_UNUSED(_state)) {102assert_negint16_eq(500);103assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(negint16_data, 3));104105assert_minimum_input_size(3, negint16_data);106}107108unsigned char negint32_data[] = {0x3a, 0xa5, 0xf7, 0x02, 0xb3};109static void test_negint32_decoding(void **_CBOR_UNUSED(_state)) {110assert_negint32_eq((uint32_t)2784428723UL);111assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(negint32_data, 5));112113assert_minimum_input_size(5, negint32_data);114}115116unsigned char negint64_data[] = {0x3b, 0xa5, 0xf7, 0x02, 0xb3,1170xa5, 0xf7, 0x02, 0xb3};118static void test_negint64_decoding(void **_CBOR_UNUSED(_state)) {119assert_negint64_eq(11959030306112471731ULL);120assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(negint64_data, 9));121122assert_minimum_input_size(9, negint64_data);123}124125unsigned char bstring_embedded_int8_data[] = {0x41, 0xFF};126static void test_bstring_embedded_int8_decoding(void **_CBOR_UNUSED(_state)) {127assert_bstring_mem_eq(bstring_embedded_int8_data + 1, 1);128assert_decoder_result(2, CBOR_DECODER_FINISHED,129decode(bstring_embedded_int8_data, 2));130131assert_minimum_input_size(2, bstring_embedded_int8_data);132}133134// The callback returns a *pointer* to the the start of the data segment (after135// the second byte of input); the data is never read, so we never run into136// memory issues despite not allocating and initializing all the data.137unsigned char bstring_int8_data[] = {0x58, 0x02 /*, [2 bytes] */};138static void test_bstring_int8_decoding(void **_CBOR_UNUSED(_state)) {139assert_bstring_mem_eq(bstring_int8_data + 2, 2);140assert_decoder_result(4, CBOR_DECODER_FINISHED, decode(bstring_int8_data, 4));141142assert_minimum_input_size(2, bstring_int8_data);143assert_decoder_result_nedata(/* expected_bytes_required= */ 2 + 2,144decode(bstring_int8_data, 2));145}146147unsigned char bstring_int8_empty_data[] = {0x58, 0x00};148static void test_bstring_int8_empty_decoding(void **_CBOR_UNUSED(_state)) {149assert_bstring_mem_eq(bstring_int8_empty_data + 2, 0);150assert_decoder_result(2, CBOR_DECODER_FINISHED,151decode(bstring_int8_empty_data, 2));152153assert_minimum_input_size(2, bstring_int8_empty_data);154}155156unsigned char bstring_int16_data[] = {0x59, 0x01, 0x5C /*, [348 bytes] */};157static void test_bstring_int16_decoding(void **_CBOR_UNUSED(_state)) {158assert_bstring_mem_eq(bstring_int16_data + 3, 348);159assert_decoder_result(3 + 348, CBOR_DECODER_FINISHED,160decode(bstring_int16_data, 3 + 348));161162assert_minimum_input_size(3, bstring_int16_data);163assert_decoder_result_nedata(/* expected_bytes_required= */ 3 + 348,164decode(bstring_int16_data, 3));165}166167unsigned char bstring_int32_data[] = {0x5A, 0x00, 0x10, 0x10,1680x10 /*, [1052688 bytes] */};169static void test_bstring_int32_decoding(void **_CBOR_UNUSED(_state)) {170assert_bstring_mem_eq(bstring_int32_data + 5, 1052688);171assert_decoder_result(5 + 1052688, CBOR_DECODER_FINISHED,172decode(bstring_int32_data, 5 + 1052688));173174assert_minimum_input_size(5, bstring_int32_data);175assert_decoder_result_nedata(/* expected_bytes_required= */ 5 + 1052688,176decode(bstring_int32_data, 5));177}178179#ifdef EIGHT_BYTE_SIZE_T180unsigned char bstring_int64_data[] = {1810x5B, 0x00, 0x00, 0x00, 0x01,1820x00, 0x00, 0x00, 0x00 /*, [4294967296 bytes] */};183static void test_bstring_int64_decoding(void **_CBOR_UNUSED(_state)) {184assert_bstring_mem_eq(bstring_int64_data + 9, 4294967296);185assert_decoder_result(9 + 4294967296, CBOR_DECODER_FINISHED,186decode(bstring_int64_data, 9 + 4294967296));187188assert_minimum_input_size(9, bstring_int64_data);189assert_decoder_result_nedata(/* expected_bytes_required= */ 9 + 4294967296,190decode(bstring_int64_data, 9));191}192#endif193194unsigned char bstring_indef_1_data[] = {0x5F, 0x40 /* Empty byte string */,1950xFF};196static void test_bstring_indef_decoding_1(void **_CBOR_UNUSED(_state)) {197assert_bstring_indef_start();198assert_decoder_result(1, CBOR_DECODER_FINISHED,199decode(bstring_indef_1_data, 3));200201assert_bstring_mem_eq(bstring_indef_1_data + 2, 0);202assert_decoder_result(1, CBOR_DECODER_FINISHED,203decode(bstring_indef_1_data + 1, 2));204205assert_indef_break();206assert_decoder_result(1, CBOR_DECODER_FINISHED,207decode(bstring_indef_1_data + 2, 1));208}209210unsigned char bstring_indef_2_data[] = {0x5F, 0xFF};211static void test_bstring_indef_decoding_2(void **_CBOR_UNUSED(_state)) {212assert_bstring_indef_start();213assert_decoder_result(1, CBOR_DECODER_FINISHED,214decode(bstring_indef_2_data, 2));215216assert_indef_break();217assert_decoder_result(1, CBOR_DECODER_FINISHED,218decode(bstring_indef_2_data + 1, 1));219}220221unsigned char bstring_indef_3_data[] = {0x5F,222// Empty byte string2230x40,224// 1B, 1 character byte string2250x58, 0x01, 0x00,226// Break2270xFF};228static void test_bstring_indef_decoding_3(void **_CBOR_UNUSED(_state)) {229assert_bstring_indef_start();230assert_decoder_result(1, CBOR_DECODER_FINISHED,231decode(bstring_indef_3_data, 6));232233assert_bstring_mem_eq(bstring_indef_3_data + 2, 0);234assert_decoder_result(1, CBOR_DECODER_FINISHED,235decode(bstring_indef_3_data + 1, 5));236237assert_bstring_mem_eq(bstring_indef_3_data + 4, 1);238assert_decoder_result(3, CBOR_DECODER_FINISHED,239decode(bstring_indef_3_data + 2, 4));240241assert_indef_break();242assert_decoder_result(1, CBOR_DECODER_FINISHED,243decode(bstring_indef_3_data + 5, 1));244}245246unsigned char string_embedded_int8_data[] = {0x61, 0xFF};247static void test_string_embedded_int8_decoding(void **_CBOR_UNUSED(_state)) {248assert_string_mem_eq(string_embedded_int8_data + 1, 1);249assert_decoder_result(2, CBOR_DECODER_FINISHED,250decode(string_embedded_int8_data, 2));251252assert_minimum_input_size(2, string_embedded_int8_data);253}254255// The callback returns a *pointer* to the the start of the data segment (after256// the second byte of input); the data is never read, so we never run into257// memory issues despite not allocating and initializing all the data.258unsigned char string_int8_data[] = {0x78, 0x02 /*, [2 bytes] */};259static void test_string_int8_decoding(void **_CBOR_UNUSED(_state)) {260assert_string_mem_eq(string_int8_data + 2, 2);261assert_decoder_result(4, CBOR_DECODER_FINISHED, decode(string_int8_data, 4));262263assert_minimum_input_size(2, string_int8_data);264assert_decoder_result_nedata(/* expected_bytes_required= */ 2 + 2,265decode(string_int8_data, 2));266}267268unsigned char string_int8_empty_data[] = {0x78, 0x00};269static void test_string_int8_empty_decoding(void **_CBOR_UNUSED(_state)) {270assert_string_mem_eq(string_int8_empty_data + 2, 0);271assert_decoder_result(2, CBOR_DECODER_FINISHED,272decode(string_int8_empty_data, 2));273274assert_minimum_input_size(2, string_int8_empty_data);275}276277unsigned char string_int16_data[] = {0x79, 0x01, 0x5C /*, [348 bytes] */};278static void test_string_int16_decoding(void **_CBOR_UNUSED(_state)) {279assert_string_mem_eq(string_int16_data + 3, 348);280assert_decoder_result(3 + 348, CBOR_DECODER_FINISHED,281decode(string_int16_data, 3 + 348));282283assert_minimum_input_size(3, string_int16_data);284assert_decoder_result_nedata(/* expected_bytes_required= */ 3 + 348,285decode(string_int16_data, 3));286}287288unsigned char string_int32_data[] = {0x7A, 0x00, 0x10, 0x10,2890x10 /*, [1052688 bytes] */};290static void test_string_int32_decoding(void **_CBOR_UNUSED(_state)) {291assert_string_mem_eq(string_int32_data + 5, 1052688);292assert_decoder_result(5 + 1052688, CBOR_DECODER_FINISHED,293decode(string_int32_data, 5 + 1052688));294295assert_minimum_input_size(5, string_int32_data);296assert_decoder_result_nedata(/* expected_bytes_required= */ 5 + 1052688,297decode(string_int32_data, 5));298}299300#ifdef EIGHT_BYTE_SIZE_T301unsigned char string_int64_data[] = {3020x7B, 0x00, 0x00, 0x00, 0x01,3030x00, 0x00, 0x00, 0x00 /*, [4294967296 bytes] */};304static void test_string_int64_decoding(void **_CBOR_UNUSED(_state)) {305assert_string_mem_eq(string_int64_data + 9, 4294967296);306assert_decoder_result(9 + 4294967296, CBOR_DECODER_FINISHED,307decode(string_int64_data, 9 + 4294967296));308309assert_minimum_input_size(9, string_int64_data);310assert_decoder_result_nedata(/* expected_bytes_required= */ 9 + 4294967296,311decode(string_int64_data, 9));312}313#endif314315unsigned char string_indef_1_data[] = {0x7F, 0x60 /* Empty string */, 0xFF};316static void test_string_indef_decoding_1(void **_CBOR_UNUSED(_state)) {317assert_string_indef_start();318assert_decoder_result(1, CBOR_DECODER_FINISHED,319decode(string_indef_1_data, 3));320321assert_string_mem_eq(string_indef_1_data + 2, 0);322assert_decoder_result(1, CBOR_DECODER_FINISHED,323decode(string_indef_1_data + 1, 2));324325assert_indef_break();326assert_decoder_result(1, CBOR_DECODER_FINISHED,327decode(string_indef_1_data + 2, 1));328}329330unsigned char string_indef_2_data[] = {0x7F, 0xFF};331static void test_string_indef_decoding_2(void **_CBOR_UNUSED(_state)) {332assert_string_indef_start();333assert_decoder_result(1, CBOR_DECODER_FINISHED,334decode(string_indef_2_data, 2));335336assert_indef_break();337assert_decoder_result(1, CBOR_DECODER_FINISHED,338decode(string_indef_2_data + 1, 1));339}340341unsigned char string_indef_3_data[] = {0x7F,342// Empty string3430x60,344// 1B, 1 character byte string3450x78, 0x01, 0x00,346// Break3470xFF};348static void test_string_indef_decoding_3(void **_CBOR_UNUSED(_state)) {349assert_string_indef_start();350assert_decoder_result(1, CBOR_DECODER_FINISHED,351decode(string_indef_3_data, 6));352353assert_string_mem_eq(string_indef_3_data + 2, 0);354assert_decoder_result(1, CBOR_DECODER_FINISHED,355decode(string_indef_3_data + 1, 5));356357assert_string_mem_eq(string_indef_3_data + 4, 1);358assert_decoder_result(3, CBOR_DECODER_FINISHED,359decode(string_indef_3_data + 2, 4));360361assert_indef_break();362assert_decoder_result(1, CBOR_DECODER_FINISHED,363decode(string_indef_3_data + 5, 1));364}365366unsigned char array_embedded_int8_data[] = {0x80};367static void test_array_embedded_int8_decoding(void **_CBOR_UNUSED(_state)) {368assert_array_start(0);369assert_decoder_result(1, CBOR_DECODER_FINISHED,370decode(array_embedded_int8_data, 1));371}372373unsigned char array_int8_data[] = {0x98, 0x02, 0x00, 0x01};374static void test_array_int8_decoding(void **_CBOR_UNUSED(_state)) {375assert_array_start(2);376assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(array_int8_data, 4));377378assert_uint8_eq(0);379assert_decoder_result(1, CBOR_DECODER_FINISHED,380decode(array_int8_data + 2, 2));381382assert_uint8_eq(1);383assert_decoder_result(1, CBOR_DECODER_FINISHED,384decode(array_int8_data + 3, 1));385386assert_minimum_input_size(2, array_int8_data);387}388389unsigned char array_int16_data[] = {0x99, 0x00, 0x02, 0x00, 0x01};390static void test_array_int16_decoding(void **_CBOR_UNUSED(_state)) {391assert_array_start(2);392assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(array_int16_data, 5));393394assert_uint8_eq(0);395assert_decoder_result(1, CBOR_DECODER_FINISHED,396decode(array_int16_data + 3, 2));397398assert_uint8_eq(1);399assert_decoder_result(1, CBOR_DECODER_FINISHED,400decode(array_int16_data + 4, 1));401402assert_minimum_input_size(3, array_int16_data);403}404405unsigned char array_int32_data[] = {0x9A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01};406static void test_array_int32_decoding(void **_CBOR_UNUSED(_state)) {407assert_array_start(2);408assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(array_int32_data, 7));409410assert_uint8_eq(0);411assert_decoder_result(1, CBOR_DECODER_FINISHED,412decode(array_int32_data + 5, 2));413414assert_uint8_eq(1);415assert_decoder_result(1, CBOR_DECODER_FINISHED,416decode(array_int32_data + 6, 1));417418assert_minimum_input_size(5, array_int32_data);419}420421unsigned char array_int64_data[] = {0x9B, 0x00, 0x00, 0x00, 0x00, 0x00,4220x00, 0x00, 0x02, 0x00, 0x01};423static void test_array_int64_decoding(void **_CBOR_UNUSED(_state)) {424assert_array_start(2);425assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(array_int64_data, 11));426427assert_uint8_eq(0);428assert_decoder_result(1, CBOR_DECODER_FINISHED,429decode(array_int64_data + 9, 2));430431assert_uint8_eq(1);432assert_decoder_result(1, CBOR_DECODER_FINISHED,433decode(array_int64_data + 10, 1));434435assert_minimum_input_size(9, array_int64_data);436}437438unsigned char array_of_arrays_data[] = {0x82, 0x80, 0x80};439static void test_array_of_arrays_decoding(void **_CBOR_UNUSED(_state)) {440assert_array_start(2);441assert_decoder_result(1, CBOR_DECODER_FINISHED,442decode(array_of_arrays_data, 3));443444assert_array_start(0);445assert_decoder_result(1, CBOR_DECODER_FINISHED,446decode(array_of_arrays_data + 1, 2));447448assert_array_start(0);449assert_decoder_result(1, CBOR_DECODER_FINISHED,450decode(array_of_arrays_data + 2, 1));451}452453unsigned char indef_array_data_1[] = {0x9F, 0x00, 0x18, 0xFF, 0x9F, 0xFF, 0xFF};454static void test_indef_array_decoding_1(void **_CBOR_UNUSED(_state)) {455assert_indef_array_start();456assert_decoder_result(1, CBOR_DECODER_FINISHED,457decode(indef_array_data_1, 7));458459assert_uint8_eq(0);460assert_decoder_result(1, CBOR_DECODER_FINISHED,461decode(indef_array_data_1 + 1, 6));462463assert_uint8_eq(255);464assert_decoder_result(2, CBOR_DECODER_FINISHED,465decode(indef_array_data_1 + 2, 4));466467assert_indef_array_start();468assert_decoder_result(1, CBOR_DECODER_FINISHED,469decode(indef_array_data_1 + 4, 3));470471assert_indef_break();472assert_decoder_result(1, CBOR_DECODER_FINISHED,473decode(indef_array_data_1 + 5, 2));474475assert_indef_break();476assert_decoder_result(1, CBOR_DECODER_FINISHED,477decode(indef_array_data_1 + 6, 1));478}479480unsigned char map_embedded_int8_data[] = {0xa1, 0x01, 0x00};481static void test_map_embedded_int8_decoding(void **_CBOR_UNUSED(_state)) {482assert_map_start(1);483assert_decoder_result(1, CBOR_DECODER_FINISHED,484decode(map_embedded_int8_data, 3));485486assert_uint8_eq(1);487assert_decoder_result(1, CBOR_DECODER_FINISHED,488decode(map_embedded_int8_data + 1, 2));489490assert_uint8_eq(0);491assert_decoder_result(1, CBOR_DECODER_FINISHED,492decode(map_embedded_int8_data + 2, 1));493}494495unsigned char map_int8_data[] = {0xB8, 0x01, 0x00, 0x01};496static void test_map_int8_decoding(void **_CBOR_UNUSED(_state)) {497assert_map_start(1);498assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(map_int8_data, 4));499500assert_uint8_eq(0);501assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(map_int8_data + 2, 2));502503assert_uint8_eq(1);504assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(map_int8_data + 3, 1));505506assert_minimum_input_size(2, map_int8_data);507}508509unsigned char map_int16_data[] = {0xB9, 0x00, 0x01, 0x00, 0x01};510static void test_map_int16_decoding(void **_CBOR_UNUSED(_state)) {511assert_map_start(1);512assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(map_int16_data, 5));513514assert_uint8_eq(0);515assert_decoder_result(1, CBOR_DECODER_FINISHED,516decode(map_int16_data + 3, 2));517518assert_uint8_eq(1);519assert_decoder_result(1, CBOR_DECODER_FINISHED,520decode(map_int16_data + 4, 1));521522assert_minimum_input_size(3, map_int16_data);523}524525unsigned char map_int32_data[] = {0xBA, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01};526static void test_map_int32_decoding(void **_CBOR_UNUSED(_state)) {527assert_map_start(1);528assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(map_int32_data, 7));529530assert_uint8_eq(0);531assert_decoder_result(1, CBOR_DECODER_FINISHED,532decode(map_int32_data + 5, 2));533534assert_uint8_eq(1);535assert_decoder_result(1, CBOR_DECODER_FINISHED,536decode(map_int32_data + 6, 1));537538assert_minimum_input_size(5, map_int32_data);539}540541unsigned char map_int64_data[] = {0xBB, 0x00, 0x00, 0x00, 0x00, 0x00,5420x00, 0x00, 0x01, 0x00, 0x01};543static void test_map_int64_decoding(void **_CBOR_UNUSED(_state)) {544assert_map_start(1);545assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(map_int64_data, 11));546547assert_uint8_eq(0);548assert_decoder_result(1, CBOR_DECODER_FINISHED,549decode(map_int64_data + 9, 2));550551assert_uint8_eq(1);552assert_decoder_result(1, CBOR_DECODER_FINISHED,553decode(map_int64_data + 10, 1));554555assert_minimum_input_size(9, map_int64_data);556}557558unsigned char indef_map_data_1[] = {0xBF, 0x00, 0x18, 0xFF, 0xFF};559static void test_indef_map_decoding_1(void **_CBOR_UNUSED(_state)) {560assert_indef_map_start();561assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(indef_map_data_1, 5));562563assert_uint8_eq(0);564assert_decoder_result(1, CBOR_DECODER_FINISHED,565decode(indef_map_data_1 + 1, 4));566567assert_uint8_eq(255);568assert_decoder_result(2, CBOR_DECODER_FINISHED,569decode(indef_map_data_1 + 2, 3));570571assert_indef_break();572assert_decoder_result(1, CBOR_DECODER_FINISHED,573decode(indef_map_data_1 + 4, 1));574}575576unsigned char embedded_tag_data[] = {0xC1};577static void test_embedded_tag_decoding(void **_CBOR_UNUSED(_state)) {578assert_tag_eq(1);579assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(embedded_tag_data, 1));580}581582unsigned char int8_tag_data[] = {0xD8, 0xFE};583static void test_int8_tag_decoding(void **_CBOR_UNUSED(_state)) {584assert_tag_eq(254);585assert_decoder_result(2, CBOR_DECODER_FINISHED, decode(int8_tag_data, 2));586587assert_minimum_input_size(2, int8_tag_data);588}589590unsigned char int16_tag_data[] = {0xD9, 0xFE, 0xFD};591static void test_int16_tag_decoding(void **_CBOR_UNUSED(_state)) {592assert_tag_eq(65277);593assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(int16_tag_data, 3));594595assert_minimum_input_size(3, int16_tag_data);596}597598unsigned char int32_tag_data[] = {0xDA, 0xFE, 0xFD, 0xFC, 0xFB};599static void test_int32_tag_decoding(void **_CBOR_UNUSED(_state)) {600assert_tag_eq(4278058235ULL);601assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(int32_tag_data, 5));602603assert_minimum_input_size(5, int32_tag_data);604}605606unsigned char int64_tag_data[] = {0xDB, 0xFE, 0xFD, 0xFC, 0xFB,6070xFA, 0xF9, 0xF8, 0xF7};608static void test_int64_tag_decoding(void **_CBOR_UNUSED(_state)) {609assert_tag_eq(18374120213919168759ULL);610assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(int64_tag_data, 9));611612assert_minimum_input_size(9, int64_tag_data);613}614615unsigned char reserved_byte_data[] = {0xDC};616static void test_reserved_byte_decoding(void **_CBOR_UNUSED(_state)) {617assert_decoder_result(0, CBOR_DECODER_ERROR, decode(reserved_byte_data, 1));618}619620unsigned char float2_data[] = {0xF9, 0x7B, 0xFF};621static void test_float2_decoding(void **_CBOR_UNUSED(_state)) {622assert_half(65504.0f);623assert_decoder_result(3, CBOR_DECODER_FINISHED, decode(float2_data, 3));624625assert_minimum_input_size(3, float2_data);626}627628unsigned char float4_data[] = {0xFA, 0x47, 0xC3, 0x50, 0x00};629static void test_float4_decoding(void **_CBOR_UNUSED(_state)) {630assert_float(100000.0f);631assert_decoder_result(5, CBOR_DECODER_FINISHED, decode(float4_data, 5));632633assert_minimum_input_size(5, float4_data);634}635636unsigned char float8_data[] = {0xFB, 0xC0, 0x10, 0x66, 0x66,6370x66, 0x66, 0x66, 0x66};638static void test_float8_decoding(void **_CBOR_UNUSED(_state)) {639assert_double(-4.1);640assert_decoder_result(9, CBOR_DECODER_FINISHED, decode(float8_data, 9));641642assert_minimum_input_size(0, float8_data);643}644645unsigned char false_data[] = {0xF4};646static void test_false_decoding(void **_CBOR_UNUSED(_state)) {647assert_bool(false);648assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(false_data, 1));649}650651unsigned char true_data[] = {0xF5};652static void test_true_decoding(void **_CBOR_UNUSED(_state)) {653assert_bool(true);654assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(true_data, 1));655}656657unsigned char null_data[] = {0xF6};658static void test_null_decoding(void **_CBOR_UNUSED(_state)) {659assert_nil();660assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(null_data, 1));661}662663unsigned char undef_data[] = {0xF7};664static void test_undef_decoding(void **_CBOR_UNUSED(_state)) {665assert_undef();666assert_decoder_result(1, CBOR_DECODER_FINISHED, decode(undef_data, 1));667}668669#define stream_test(f) cmocka_unit_test_teardown(f, clean_up_stream_assertions)670671int main(void) {672const struct CMUnitTest tests[] = {673stream_test(test_no_data),674675stream_test(test_uint8_embedded_decoding),676stream_test(test_uint8_decoding),677stream_test(test_uint16_decoding),678stream_test(test_uint32_decoding),679stream_test(test_uint64_decoding),680681stream_test(test_negint8_embedded_decoding),682stream_test(test_negint8_decoding),683stream_test(test_negint16_decoding),684stream_test(test_negint32_decoding),685stream_test(test_negint64_decoding),686687stream_test(test_bstring_embedded_int8_decoding),688stream_test(test_bstring_int8_decoding),689stream_test(test_bstring_int8_empty_decoding),690stream_test(test_bstring_int16_decoding),691stream_test(test_bstring_int32_decoding),692#ifdef EIGHT_BYTE_SIZE_T693stream_test(test_bstring_int64_decoding),694#endif695stream_test(test_bstring_indef_decoding_1),696stream_test(test_bstring_indef_decoding_2),697stream_test(test_bstring_indef_decoding_3),698699stream_test(test_string_embedded_int8_decoding),700stream_test(test_string_int8_decoding),701stream_test(test_string_int8_empty_decoding),702stream_test(test_string_int16_decoding),703stream_test(test_string_int32_decoding),704#ifdef EIGHT_BYTE_SIZE_T705stream_test(test_string_int64_decoding),706#endif707stream_test(test_string_indef_decoding_1),708stream_test(test_string_indef_decoding_2),709stream_test(test_string_indef_decoding_3),710711stream_test(test_array_embedded_int8_decoding),712stream_test(test_array_int8_decoding),713stream_test(test_array_int16_decoding),714stream_test(test_array_int32_decoding),715stream_test(test_array_int64_decoding),716stream_test(test_array_of_arrays_decoding),717stream_test(test_indef_array_decoding_1),718719stream_test(test_map_embedded_int8_decoding),720stream_test(test_map_int8_decoding),721stream_test(test_map_int16_decoding),722stream_test(test_map_int32_decoding),723stream_test(test_map_int64_decoding),724stream_test(test_indef_map_decoding_1),725726stream_test(test_embedded_tag_decoding),727stream_test(test_int8_tag_decoding),728stream_test(test_int16_tag_decoding),729stream_test(test_int32_tag_decoding),730stream_test(test_int64_tag_decoding),731stream_test(test_reserved_byte_decoding),732733stream_test(test_float2_decoding),734stream_test(test_float4_decoding),735stream_test(test_float8_decoding),736737stream_test(test_false_decoding),738stream_test(test_true_decoding),739stream_test(test_null_decoding),740stream_test(test_undef_decoding)};741return cmocka_run_group_tests(tests, NULL, NULL);742}743744745