add test
diff --git a/t/picotls.c b/t/picotls.c
index c82cc41..a5a79dc 100644
--- a/t/picotls.c
+++ b/t/picotls.c
@@ -1901,6 +1901,56 @@
ctx->sign_certificate = second_sc_orig;
}
+static void do_test_tlsblock(size_t len_encoded, size_t max_bytes)
+{
+ ptls_buffer_t buf;
+ const uint8_t *src, *end;
+ int expect_overflow = 0, ret;
+
+ /* block that fits in */
+ ptls_buffer_init(&buf, "", 0);
+ ptls_buffer_push_block(&buf, len_encoded, {
+ for (size_t i = 0; i < max_bytes; ++i)
+ ptls_buffer_push(&buf, (uint8_t)i);
+ });
+ src = buf.base;
+ end = buf.base + buf.off;
+ ptls_decode_block(src, end, len_encoded, {
+ ok(end - src == 255);
+ for (size_t i = 0; i < max_bytes; ++i)
+ ok(*src == i);
+ src = end;
+ });
+
+ /* block that does not fit in */
+ ptls_buffer_push_block(&buf, len_encoded, {
+ for (size_t i = 0; i < max_bytes + 1; i++)
+ ptls_buffer_push(&buf, 1);
+ expect_overflow = 1;
+ });
+ ok(!"fail");
+
+Exit:
+ if (ret != 0) {
+ if (expect_overflow) {
+ ok(ret == PTLS_ERROR_BLOCK_OVERFLOW);
+ } else {
+ ok(!"fail");
+ }
+ }
+ ptls_buffer_dispose(&buf);
+}
+
+static void test_tlsblock8(void)
+{
+ do_test_tlsblock(1, 255);
+}
+
+static void test_tlsblock16(void)
+{
+ do_test_tlsblock(2, 65535);
+}
+
static void test_quicint(void)
{
#define CHECK_PATTERN(output, ...) \
@@ -2161,6 +2211,8 @@
subtest("chacha20", test_chacha20);
subtest("ffx", test_ffx);
subtest("base64-decode", test_base64_decode);
+ subtest("tls-block8", test_tlsblock8);
+ subtest("tls-block16", test_tlsblock16);
subtest("ech", test_ech);
subtest("fragmented-message", test_fragmented_message);
subtest("handshake", test_all_handshakes);