Path: blob/main/contrib/libcbor/test/bytestring_test.c
39481 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 "test_allocator.h"1011cbor_item_t *bs;12struct cbor_load_result res;1314unsigned char data1[] = {0x40, 0xFF};15unsigned char data2[] = {0x41, 0xA1};16unsigned char data3[] = {0x58, 0x01, 0xA1, 0xFF};17unsigned char data4[] = {180x58, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,190x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,200x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21,210x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D,220x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,230x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,240x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,250x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D,260x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,270x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,280x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81,290x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D,300x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,310x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5,320xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1,330xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD,340xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9,350xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5,360xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1,370xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED,380xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9,390xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF};40unsigned char data5[] = {410x59, 0x00, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,420x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,430x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,440x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,450x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,460x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,470x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,480x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C,490x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,500x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74,510x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80,520x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C,530x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,540x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4,550xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0,560xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC,570xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8,580xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4,590xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0,600xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC,610xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,620xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF};63unsigned char data6[] = {640x5A, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,650x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,660x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,670x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A,680x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,690x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42,700x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E,710x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,720x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,730x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,740x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,750x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A,760x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,770x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2,780xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE,790xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA,800xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6,810xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2,820xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE,830xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA,840xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6,850xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF};86unsigned char data7[] = {870x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x01, 0x02,880x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,890x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,900x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,910x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32,920x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E,930x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,940x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,950x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62,960x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,970x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,980x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86,990x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92,1000x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E,1010x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA,1020xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,1030xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2,1040xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE,1050xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,1060xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,1070xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2,1080xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE,1090xFF};110unsigned char data8[] = {1110x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x01,1120x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,1130x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,1140x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,1150x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31,1160x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D,1170x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,1180x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55,1190x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61,1200x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D,1210x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,1220x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85,1230x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91,1240x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D,1250x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9,1260xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5,1270xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1,1280xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,1290xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9,1300xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5,1310xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1,1320xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD,1330xFE, 0xFF};134135static void test_empty_bs(void **_CBOR_UNUSED(_state)) {136bs = cbor_load(data1, 2, &res);137assert_non_null(bs);138assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);139assert_true(cbor_isa_bytestring(bs));140assert_size_equal(cbor_bytestring_length(bs), 0);141assert_true(res.read == 1);142cbor_decref(&bs);143assert_null(bs);144}145146static void test_embedded_bs(void **_CBOR_UNUSED(_state)) {147bs = cbor_load(data2, 2, &res);148assert_non_null(bs);149assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);150assert_true(cbor_isa_bytestring(bs));151assert_true(cbor_bytestring_length(bs) == 1);152assert_true(res.read == 2);153assert_true(*cbor_bytestring_handle(bs) == 0xA1);154assert_memory_equal(cbor_bytestring_handle(bs), data2 + 1, 1);155cbor_decref(&bs);156assert_null(bs);157}158159static void test_notenough_data(void **_CBOR_UNUSED(_state)) {160bs = cbor_load(data3, 2, &res);161assert_null(bs);162assert_true(res.error.code == CBOR_ERR_NOTENOUGHDATA);163}164165static void test_short_bs1(void **_CBOR_UNUSED(_state)) {166bs = cbor_load(data3, 4, &res);167assert_non_null(bs);168assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);169assert_true(cbor_isa_bytestring(bs));170assert_true(cbor_bytestring_length(bs) == 1);171assert_true(res.read == 3);172assert_true(*cbor_bytestring_handle(bs) == 0xA1);173assert_memory_equal(cbor_bytestring_handle(bs), data3 + 2, 1);174cbor_decref(&bs);175assert_null(bs);176}177178static void test_short_bs2(void **_CBOR_UNUSED(_state)) {179bs = cbor_load(data4, 259, &res);180assert_non_null(bs);181assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);182assert_true(cbor_isa_bytestring(bs));183assert_true(cbor_bytestring_length(bs) == 255);184assert_true(res.read == 257);185assert_memory_equal(cbor_bytestring_handle(bs), data4 + 2, 0xFF);186cbor_decref(&bs);187assert_null(bs);188}189190static void test_half_bs(void **_CBOR_UNUSED(_state)) {191bs = cbor_load(data5, 259, &res);192assert_non_null(bs);193assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);194assert_true(cbor_isa_bytestring(bs));195assert_true(cbor_bytestring_length(bs) == 255);196assert_true(res.read == 258);197assert_memory_equal(cbor_bytestring_handle(bs), data5 + 3, 0xFF);198cbor_decref(&bs);199assert_null(bs);200}201202static void test_int_bs(void **_CBOR_UNUSED(_state)) {203bs = cbor_load(data6, 261, &res);204assert_non_null(bs);205assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);206assert_true(cbor_isa_bytestring(bs));207assert_true(cbor_bytestring_length(bs) == 255);208assert_true(res.read == 260);209assert_memory_equal(cbor_bytestring_handle(bs), data6 + 5, 0xFF);210cbor_decref(&bs);211assert_null(bs);212}213214static void test_long_bs(void **_CBOR_UNUSED(_state)) {215bs = cbor_load(data7, 265, &res);216assert_non_null(bs);217assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);218assert_true(cbor_isa_bytestring(bs));219assert_true(cbor_bytestring_length(bs) == 255);220assert_true(res.read == 264);221assert_memory_equal(cbor_bytestring_handle(bs), data7 + 9, 0xFF);222cbor_decref(&bs);223assert_null(bs);224}225226unsigned char data9[] = {0x5F, 0xFF};227228static void test_zero_indef(void **_CBOR_UNUSED(_state)) {229bs = cbor_load(data9, 2, &res);230assert_non_null(bs);231assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);232assert_true(cbor_isa_bytestring(bs));233assert_true(cbor_bytestring_is_indefinite(bs));234assert_true(cbor_bytestring_chunk_count(bs) == 0);235assert_true(res.read == 2);236cbor_decref(&bs);237assert_null(bs);238}239240unsigned char data10[] = {0x5F, 0x58, 0x01, 0xA1, 0xFF, 0xFF};241242/* start | bstring | break| extra */243244static void test_short_indef(void **_CBOR_UNUSED(_state)) {245bs = cbor_load(data10, 6, &res);246assert_non_null(bs);247assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);248assert_true(cbor_isa_bytestring(bs));249assert_true(cbor_bytestring_length(bs) == 0);250assert_true(cbor_bytestring_is_indefinite(bs));251assert_true(cbor_bytestring_chunk_count(bs) == 1);252assert_true(res.read == 5);253assert_true(cbor_isa_bytestring(cbor_bytestring_chunks_handle(bs)[0]));254assert_true(cbor_bytestring_length(cbor_bytestring_chunks_handle(bs)[0]) ==2551);256assert_true(*cbor_bytestring_handle(cbor_bytestring_chunks_handle(bs)[0]) ==2570xA1);258cbor_decref(&bs);259assert_null(bs);260}261262unsigned char data11[] = {0x5F, 0x58, 0x01, 0xA1, 0x58, 0x01, 0xA2, 0xFF, 0xFF};263264/* start | bstring | bstring | break|265* extra */266267static void test_two_indef(void **_CBOR_UNUSED(_state)) {268bs = cbor_load(data11, 9, &res);269assert_non_null(bs);270assert_size_equal(1, cbor_refcount(bs));271assert_true(cbor_typeof(bs) == CBOR_TYPE_BYTESTRING);272assert_true(cbor_isa_bytestring(bs));273assert_true(cbor_bytestring_length(bs) == 0);274assert_true(cbor_bytestring_is_indefinite(bs));275assert_true(cbor_bytestring_chunk_count(bs) == 2);276assert_true(res.read == 8);277assert_true(cbor_isa_bytestring(cbor_bytestring_chunks_handle(bs)[0]));278assert_true(cbor_bytestring_length(cbor_bytestring_chunks_handle(bs)[0]) ==2791);280assert_true(*cbor_bytestring_handle(cbor_bytestring_chunks_handle(bs)[0]) ==2810xA1);282assert_true(cbor_isa_bytestring(cbor_bytestring_chunks_handle(bs)[1]));283assert_true(cbor_bytestring_length(cbor_bytestring_chunks_handle(bs)[1]) ==2841);285assert_true(*cbor_bytestring_handle(cbor_bytestring_chunks_handle(bs)[1]) ==2860xA2);287cbor_decref(&bs);288assert_null(bs);289}290291unsigned char data12[] = {0x5F, 0x58, 0x01};292293/* start | bstring - too short */294295static void test_missing_indef(void **_CBOR_UNUSED(_state)) {296bs = cbor_load(data12, 3, &res);297assert_true(res.error.code == CBOR_ERR_NOTENOUGHDATA);298assert_null(bs);299}300301static void test_inline_creation(void **_CBOR_UNUSED(_state)) {302bs = cbor_build_bytestring((cbor_data) "Hello!", 6);303assert_memory_equal(cbor_bytestring_handle(bs), "Hello!", 6);304cbor_decref(&bs);305}306307static void test_add_chunk_reallocation_overflow(void **_CBOR_UNUSED(_state)) {308bs = cbor_new_indefinite_bytestring();309cbor_item_t *chunk = cbor_build_bytestring((cbor_data) "Hello!", 6);310struct cbor_indefinite_string_data *metadata =311(struct cbor_indefinite_string_data *)bs->data;312// Pretend we already have many chunks allocated313metadata->chunk_count = SIZE_MAX;314metadata->chunk_capacity = SIZE_MAX;315316assert_false(cbor_bytestring_add_chunk(bs, chunk));317assert_size_equal(cbor_refcount(chunk), 1);318319metadata->chunk_count = 0;320metadata->chunk_capacity = 0;321cbor_decref(&chunk);322cbor_decref(&bs);323}324325static void test_bytestring_creation(void **_CBOR_UNUSED(_state)) {326WITH_FAILING_MALLOC({ assert_null(cbor_new_definite_bytestring()); });327328WITH_FAILING_MALLOC({ assert_null(cbor_new_indefinite_bytestring()); });329WITH_MOCK_MALLOC({ assert_null(cbor_new_indefinite_bytestring()); }, 2,330MALLOC, MALLOC_FAIL);331332unsigned char bytes[] = {0, 0, 0xFF, 0xAB};333334WITH_FAILING_MALLOC({ assert_null(cbor_build_bytestring(bytes, 4)); });335WITH_MOCK_MALLOC({ assert_null(cbor_build_bytestring(bytes, 4)); }, 2, MALLOC,336MALLOC_FAIL);337}338339static void test_bytestring_add_chunk(void **_CBOR_UNUSED(_state)) {340unsigned char bytes[] = {0, 0, 0xFF, 0xAB};341WITH_MOCK_MALLOC(342{343cbor_item_t *bytestring = cbor_new_indefinite_bytestring();344cbor_item_t *chunk = cbor_build_bytestring(bytes, 4);345346assert_false(cbor_bytestring_add_chunk(bytestring, chunk));347348assert_size_equal(cbor_bytestring_chunk_count(bytestring), 0);349assert_size_equal(350((struct cbor_indefinite_string_data *)bytestring->data)351->chunk_capacity,3520);353354cbor_decref(&chunk);355cbor_decref(&bytestring);356},3575, MALLOC, MALLOC, MALLOC, MALLOC, REALLOC_FAIL);358}359360int main(void) {361const struct CMUnitTest tests[] = {362cmocka_unit_test(test_empty_bs),363cmocka_unit_test(test_embedded_bs),364cmocka_unit_test(test_notenough_data),365cmocka_unit_test(test_short_bs1),366cmocka_unit_test(test_short_bs2),367cmocka_unit_test(test_half_bs),368cmocka_unit_test(test_int_bs),369cmocka_unit_test(test_long_bs),370cmocka_unit_test(test_zero_indef),371cmocka_unit_test(test_short_indef),372cmocka_unit_test(test_two_indef),373cmocka_unit_test(test_missing_indef),374cmocka_unit_test(test_inline_creation),375cmocka_unit_test(test_add_chunk_reallocation_overflow),376cmocka_unit_test(test_bytestring_creation),377cmocka_unit_test(test_bytestring_add_chunk),378};379return cmocka_run_group_tests(tests, NULL, NULL);380}381382383