)]}'
{
  "log": [
    {
      "commit": "4b8e8715a181ca560d1740ed391509f789158867",
      "tree": "ba7eb9c551aca57f104af6786ce8e0376157fd68",
      "parents": [
        "7f0d38c1c54c920d56b4e13ceb1c2dfa2b1325e1",
        "c49797389cde370976889b1bfc728d40f0ae0f0f"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Fri Oct 23 15:54:33 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 15:54:33 2026 +0900"
      },
      "message": "Merge pull request #659 from h2o/kazuho/check-sign-algo\n\nbefore verifying CertificateVerify, confirm that the signature algorithm being used is among the options that we advertised"
    },
    {
      "commit": "c49797389cde370976889b1bfc728d40f0ae0f0f",
      "tree": "ba7eb9c551aca57f104af6786ce8e0376157fd68",
      "parents": [
        "7f0d38c1c54c920d56b4e13ceb1c2dfa2b1325e1"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Thu Oct 22 19:16:06 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Thu Oct 22 19:16:06 2026 +0900"
      },
      "message": "before verifying CertificateVerify, confirm that the signature algorithm being used is among the options that we advertised\n"
    },
    {
      "commit": "7f0d38c1c54c920d56b4e13ceb1c2dfa2b1325e1",
      "tree": "e5283a97586aa26c5eb50a23c1b559f3b7a28183",
      "parents": [
        "6c5cfd7043c79d92844d4b33e7e11636ffbc733b",
        "3aba6852aaae14d6e2e8d6fc2d547fc39b76d432"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 15:30:41 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 15:30:41 2026 +0900"
      },
      "message": "Merge pull request #633 from h2o/kazuho/audit2609/m2\n\nffx: fix the number of bits being enciphered when bit_length is not a multiple of 8"
    },
    {
      "commit": "6c5cfd7043c79d92844d4b33e7e11636ffbc733b",
      "tree": "4ffb4fa2ae36dd031644825b7705e30a82b86ee7",
      "parents": [
        "6fc256fafa7c67396c2ed730e83caf7d2ed0a13a",
        "d5f1e33212e1ee919b3f7e1357ce90d6747f4d97"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 11:18:57 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:18:57 2026 +0900"
      },
      "message": "Merge pull request #658 from h2o/kazuho/audit2609/m6\n\nopenssl: check the result of asynchronous signing"
    },
    {
      "commit": "6fc256fafa7c67396c2ed730e83caf7d2ed0a13a",
      "tree": "32816091ef6cabf01fcc16fbe05414761045b06d",
      "parents": [
        "7ef9d5289f7fc877e7790ed76ad8d71c805b5cff",
        "f03c26a88ab92bcad1b2dbf7db3d23753ecd232c"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 11:18:44 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:18:44 2026 +0900"
      },
      "message": "Merge pull request #657 from h2o/kazuho/audit2609/l18\n\ncopy only the bytes being derived when updating the traffic key"
    },
    {
      "commit": "7ef9d5289f7fc877e7790ed76ad8d71c805b5cff",
      "tree": "57684f57c86b3d10cffcd013f625dd1e2c28050d",
      "parents": [
        "3f4050d85955d15ce7bc82a2ef0c987ef4f5f831",
        "2ba4d810de84ffc91636ef7f2ce354344b359158"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 11:18:28 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:18:28 2026 +0900"
      },
      "message": "Merge pull request #656 from h2o/kazuho/audit2609/l17\n\nserver: remove always-true condition when selecting key share"
    },
    {
      "commit": "3f4050d85955d15ce7bc82a2ef0c987ef4f5f831",
      "tree": "0fe82f9d24b78b3890e2b04680bb034f33ad195d",
      "parents": [
        "7039b134b9e36b4def0e931b257a7d258de1ff5a",
        "13b5085277aa379796e3a7c0b3886aa32707bb3a"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 11:18:09 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:18:09 2026 +0900"
      },
      "message": "Merge pull request #655 from h2o/kazuho/audit2609/l16\n\nserver: remove redundant check when setting up ECH"
    },
    {
      "commit": "7039b134b9e36b4def0e931b257a7d258de1ff5a",
      "tree": "252f6a93e947a9979af6c57c570f2a8aaae3243c",
      "parents": [
        "c1b701729dbae8e72fadc6fa5361a299ce7c419b",
        "99699a28bec758f7cf610608a0f0c15101bd1ecb"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 11:17:53 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:17:53 2026 +0900"
      },
      "message": "Merge pull request #654 from h2o/kazuho/audit2609/l15\n\nECH: fix the amount of padding when SNI is present"
    },
    {
      "commit": "c1b701729dbae8e72fadc6fa5361a299ce7c419b",
      "tree": "6a194abd4613226f593219a078b09601b2e064cf",
      "parents": [
        "bb70efa624abe787af086a871aea8add51159437",
        "aef9830d83dd619de46655edb02a79966c1744b5"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 11:17:40 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:17:40 2026 +0900"
      },
      "message": "Merge pull request #653 from h2o/kazuho/audit2609/l13\n\nremove stray semicolon from the buffer_push_extension macro"
    },
    {
      "commit": "bb70efa624abe787af086a871aea8add51159437",
      "tree": "5c8c90a79b9fd9ed462584ee02bb2b7c807084e1",
      "parents": [
        "45115edb0b42dc3aced50012a7c6d1a7b4510e59",
        "39e5fdb4a4a7fdfb4b04e252612a84b729a473af"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 11:17:26 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:17:26 2026 +0900"
      },
      "message": "Merge pull request #652 from h2o/kazuho/audit2609/l10\n\nopenssl: remove unused variable in ptls_openssl_create_key_exchange"
    },
    {
      "commit": "45115edb0b42dc3aced50012a7c6d1a7b4510e59",
      "tree": "8481d0c7df4083b784bb919fb1b22541df3cc0a9",
      "parents": [
        "c6f0aac2435f35bc23baad84d450a05573c16e75",
        "bc96c860b20a8700b50cc86577eb03e6d162d60f"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 11:17:13 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:17:13 2026 +0900"
      },
      "message": "Merge pull request #651 from h2o/kazuho/audit2609/l9\n\nlibaegis: clear the cipher state when disposing of the AEAD context"
    },
    {
      "commit": "c6f0aac2435f35bc23baad84d450a05573c16e75",
      "tree": "06cb93133f7f3078c245f5a42253fe5f290e64b5",
      "parents": [
        "686cc68750ed31633efecb47b708967ba0b81b41",
        "72923565208e87e360015dfdbee112130802d890"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Oct 20 11:17:00 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:17:00 2026 +0900"
      },
      "message": "Merge pull request #650 from h2o/kazuho/audit2609/l14\n\nECH: handle failure to create the AEAD context when greasing"
    },
    {
      "commit": "686cc68750ed31633efecb47b708967ba0b81b41",
      "tree": "8ce20e33a44c9f06e7de9d550a7a5f81b2d78f02",
      "parents": [
        "859be494a414d723dee05b15b2523409e4ddfffb",
        "c49b7f7a198993c64d1a6a55f051f5dc6d1c26bd"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 21:07:36 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 21:07:36 2026 +0900"
      },
      "message": "Merge pull request #649 from h2o/kazuho/audit2609/l11\n\nopenssl: handle failure of ASYNC_WAIT_CTX_new"
    },
    {
      "commit": "859be494a414d723dee05b15b2523409e4ddfffb",
      "tree": "066622ae84e119a8567b73890dcdca6e824952d1",
      "parents": [
        "23ed02a263ce10aa27a8fc997fe089df47f25a26",
        "cbf2b098dbb64b11ea4f6e791f6c174263eba359"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 21:07:20 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 21:07:20 2026 +0900"
      },
      "message": "Merge pull request #648 from h2o/kazuho/audit2609/l12\n\nopenssl: fix memory leak in verify_cert when building the chain fails"
    },
    {
      "commit": "23ed02a263ce10aa27a8fc997fe089df47f25a26",
      "tree": "7839e83a56194e620e0e95ddb8d19bc901aaee28",
      "parents": [
        "a1e2b4e17e68c0ee4429fd97290ca74858606c91",
        "f46bd600f64f220c98067a66e9199a2f5a7934a2"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 17:29:40 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 17:29:40 2026 +0900"
      },
      "message": "Merge pull request #647 from h2o/kazuho/audit2609/l6\n\nfusion: test the correct CPUID bit for PCLMULQDQ on Windows"
    },
    {
      "commit": "a1e2b4e17e68c0ee4429fd97290ca74858606c91",
      "tree": "c893d022a083c820c1cd74fecfcaa3d23fb6e2da",
      "parents": [
        "44404d48bddad64157f8abdbb4816205db98c41d",
        "a9601b6b68c9895d7523fd17f36d38bbd8bf4f23"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 17:07:33 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 17:07:33 2026 +0900"
      },
      "message": "Merge pull request #646 from h2o/kazuho/audit2609/m18\n\napply per-connection log filters when the connection state is up to date"
    },
    {
      "commit": "44404d48bddad64157f8abdbb4816205db98c41d",
      "tree": "bd6c1b936039cca01e4e8f2a9cb3282069f120ff",
      "parents": [
        "1e4a852fea3d63bc4d34da6dc1edb5885c0f3dc4",
        "7a1205a29626ad0ff889cd2e92d442b964e45412"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 16:54:59 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 16:54:59 2026 +0900"
      },
      "message": "Merge pull request #645 from h2o/kazuho/audit2609/m17\n\ncheck the length of the TLS 1.3 traffic secret when importing a connection"
    },
    {
      "commit": "1e4a852fea3d63bc4d34da6dc1edb5885c0f3dc4",
      "tree": "ffb43aca8980ead741caf722566bea5e46158dc4",
      "parents": [
        "007c22df6a2c7f0e43fed471398e9df855f0b61d",
        "1c1dc08e4c73d2bb84e1bd4dbb7f80d88134e93a"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 16:54:50 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 16:54:50 2026 +0900"
      },
      "message": "Merge pull request #644 from h2o/kazuho/audit2609/m15\n\nserver: check the errors returned by key_schedule_extract"
    },
    {
      "commit": "007c22df6a2c7f0e43fed471398e9df855f0b61d",
      "tree": "17d797e117088510be12b5aed3bf82c51b1c238d",
      "parents": [
        "75e9ae1f6f9ad2745a17208a6393238db266ad97",
        "b7ea10df338d8d8719acd7e9eb5b50c5dd102f2f"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 16:54:40 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 16:54:40 2026 +0900"
      },
      "message": "Merge pull request #643 from h2o/kazuho/audit2609/m12\n\nclient: do not save session tickets when no key share is available"
    },
    {
      "commit": "75e9ae1f6f9ad2745a17208a6393238db266ad97",
      "tree": "c7961e04c6c8a3087881b13b2e303c13f1adae22",
      "parents": [
        "e3c7bf11963bb4f54805a3a575471a1154ec7dc4",
        "ebadde52381e0374e5b12e1d711564ec38191e91"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 16:54:29 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 16:54:29 2026 +0900"
      },
      "message": "Merge pull request #642 from h2o/kazuho/audit2609/m13\n\npropagate the error code returned by the on_extension callback"
    },
    {
      "commit": "e3c7bf11963bb4f54805a3a575471a1154ec7dc4",
      "tree": "5f114aa858eb16d5eb1d7397e920ef8d44dda29f",
      "parents": [
        "3667faa243af9039d2d134a0208302f038ab1771",
        "e7ba43394fa6fbd23ddc45cc3be1560d9afa32c9"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 16:54:17 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 16:54:17 2026 +0900"
      },
      "message": "Merge pull request #641 from h2o/kazuho/audit2609/m11\n\nclient: check the error returned by send_finished"
    },
    {
      "commit": "3667faa243af9039d2d134a0208302f038ab1771",
      "tree": "2fa695d225b7f7971a9bd0dd466b82c9d084e9c6",
      "parents": [
        "8994fb9f1d6dc90bd8d3bc9c7cf5106c7525446c",
        "99964d8f2a2867f579a7ffe6e041c8a967c721bc"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 15:55:24 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 15:55:24 2026 +0900"
      },
      "message": "Merge pull request #640 from h2o/kazuho/audit2609/m10\n\nfix NULL dereference in send_session_ticket upon memory allocation failure"
    },
    {
      "commit": "8994fb9f1d6dc90bd8d3bc9c7cf5106c7525446c",
      "tree": "0af50336f63a1f916df6fec14f1028277bda424a",
      "parents": [
        "5b520e36dfa6dd70b164b646022a20602fd0c7ec",
        "3c028c013f022fd1c6765119ae6d0301eddf9e7d"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 15:53:13 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 15:53:13 2026 +0900"
      },
      "message": "Merge pull request #639 from h2o/kazuho/audit2609/m9\n\nfix memory leak in key_schedule_new when creating the outer hash context fails"
    },
    {
      "commit": "5b520e36dfa6dd70b164b646022a20602fd0c7ec",
      "tree": "1442b4a3238b606c0956ff18c10d7310ec83246c",
      "parents": [
        "9462e9cf5f153d0f913ea3b1a8eb744406f85c50",
        "8845599a696f8fd0d5c21ad397f785673c3283a4"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 15:53:07 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 15:53:07 2026 +0900"
      },
      "message": "Merge pull request #637 from h2o/kazuho/audit2609/m7\n\nbase64: reject non-blank characters following the padding"
    },
    {
      "commit": "9462e9cf5f153d0f913ea3b1a8eb744406f85c50",
      "tree": "5dbba23c43e850759149d447b7fa2e0f4cbf1949",
      "parents": [
        "f4de84ba3199058448b73f41401d7acac3c42a8a",
        "d827c518b3719241525018e3a284fdde786ddc2a"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 15:36:59 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 15:36:59 2026 +0900"
      },
      "message": "Merge pull request #638 from h2o/kazuho/audit2609/m8\n\nfix memory leak in client_setup_ech"
    },
    {
      "commit": "f4de84ba3199058448b73f41401d7acac3c42a8a",
      "tree": "fdb3bbe3b7c941f579fd9be9d5c6f50e6f325cfc",
      "parents": [
        "2c842a18351daf9c8b0ca807452b25d10943a491",
        "745619dabdd0c057d8add14f29b72f321aede193"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 14:49:14 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 14:49:14 2026 +0900"
      },
      "message": "Merge pull request #636 from h2o/kazuho/audit2609/m5\n\nopenssl: fix double free of EC_KEY when ptls_openssl_create_key_exchange fails"
    },
    {
      "commit": "2c842a18351daf9c8b0ca807452b25d10943a491",
      "tree": "db6c49e39739547662b26fc302fd350bfbf398b4",
      "parents": [
        "c3594524c4e6d835e1e25c7198db0e1b97ef99da",
        "99bca67bc528b60ee5ffb838eb62e9d4ebf38fc4"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 14:41:24 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 14:41:24 2026 +0900"
      },
      "message": "Merge pull request #635 from h2o/kazuho/audit2609/m4\n\nhpke: report an error when the AEAD context cannot be created"
    },
    {
      "commit": "c3594524c4e6d835e1e25c7198db0e1b97ef99da",
      "tree": "e3662e03742e351e92d28d36885a83494a0143ae",
      "parents": [
        "bd78ed24997ddbdd8db9c408755780283b6fbc81",
        "8cc9f2f4280c6dcf99a80f4631bd7db4a832863a"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 14:26:20 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 14:26:20 2026 +0900"
      },
      "message": "Merge pull request #634 from h2o/kazuho/audit2609/m3\n\nffx: fix crash when ptls_ffx_setup_crypto fails"
    },
    {
      "commit": "bd78ed24997ddbdd8db9c408755780283b6fbc81",
      "tree": "a6353a8f56a9160c6995106e444d5cfd850a6fdb",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab",
        "200720530b8e0773f358f34128d6bdcbb9785447"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 14:25:53 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 14:25:53 2026 +0900"
      },
      "message": "Merge pull request #632 from h2o/kazuho/audit2609/h1-m14\n\ncheck the length of the PSK binder when using an external PSK"
    },
    {
      "commit": "7a1205a29626ad0ff889cd2e92d442b964e45412",
      "tree": "01fb87710578baaa87e5f8c59efdc11c42c1c4b7",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:24:28 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 14:13:56 2026 +0900"
      },
      "message": "check the length of the TLS 1.3 traffic secret when importing a connection\n\n`import_tls13_traffic_protection`, used by `ptls_import`, copied `digest_size` bytes of the traffic secret without checking that the input contained that many bytes, whereas the TLS 1.2 counterpart (`import_tls12_traffic_protection`) checks the length before copying.\n\nWhen `ptls_import` is given a truncated input, this results in a read of up to `digest_size` bytes beyond the end of the input. The import still fails afterwards (decoding of the sequence number that follows the secret detects that the input has been exhausted, and PTLS_ALERT_DECODE_ERROR is returned), and the bytes being read are discarded, but the out-of-bounds read occurs before that. Applications that pass data received from other processes or hosts to `ptls_import` are affected.\n\nThis PR adds the same length check as the TLS 1.2 variant, so that truncated input is rejected before being read.\n"
    },
    {
      "commit": "8845599a696f8fd0d5c21ad397f785673c3283a4",
      "tree": "5858f273f6260f06824ba7cabd292b0b2d5b77c9",
      "parents": [
        "b9c89c4416c88c69f57f2c2f65c6c6fc9db906d0"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 14:03:59 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 14:03:59 2026 +0900"
      },
      "message": "add tests for characters following base64 padding\n\nTests that blanks following the padding are accepted, and that other characters are rejected.\n"
    },
    {
      "commit": "200720530b8e0773f358f34128d6bdcbb9785447",
      "tree": "a6353a8f56a9160c6995106e444d5cfd850a6fdb",
      "parents": [
        "9179f94a49ac575b2ccccceeec92f5f333182d56"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:51:49 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:51:49 2026 +0900"
      },
      "message": "assert that the selected PSK binder fits in the buffer it is copied into\n\n`server_handle_hello` copies the binder of the selected PSK into `properties-\u003eserver.selected_psk_binder.base`, which is a fixed-size buffer of `PTLS_MAX_DIGEST_SIZE` bytes. With the preceding changes, the binder length always equals the digest size when a PSK is selected, therefore the copy always fits.\n\nThis commit adds an assertion at the copy site, so that any future code path selecting a PSK without validating the binder length is caught rather than causing a buffer overflow.\n"
    },
    {
      "commit": "9179f94a49ac575b2ccccceeec92f5f333182d56",
      "tree": "f113f0a0b0fa1016d2d2ad5aef27e1493499f594",
      "parents": [
        "2976e31a1c3ae434869d567d35f1bce7cd742a19"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:48:59 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:48:59 2026 +0900"
      },
      "message": "abort the handshake when the binder of the selected external PSK has wrong length\n\nThe previous commit skipped an external-PSK identity whose binder length did not match the digest size, treating it as if the identity was not found. That lets the handshake fall back to a full handshake, whereas RFC 9846 Section 4.3.11 requires the server to abort the handshake when the binder of the selected PSK does not validate, and Section 6.2 names decrypt_error as the alert for that.\n\nThis commit moves the length check to where the binder is verified, so that a binder of wrong length is rejected with PTLS_ALERT_DECRYPT_ERROR, the same way as a binder with a wrong value. The resumption path keeps skipping tickets whose binder length does not match the digest size before selecting one.\n"
    },
    {
      "commit": "f46bd600f64f220c98067a66e9199a2f5a7934a2",
      "tree": "c99757c600f57dae628ff219e7d772dbeb385d56",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:38:01 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:38:01 2026 +0900"
      },
      "message": "fusion: test the correct CPUID bit for PCLMULQDQ on Windows\n\nThe Windows version of `ptls_fusion_is_supported_by_cpu` checked bit 5 of ECX of CPUID leaf 1 (VMX) instead of bit 1 (PCLMULQDQ). Consequently, fusion was considered unavailable on CPUs or VMs that do not expose VMX, and would have been used on a CPU that lacks PCLMULQDQ but has VMX (none in practice, as AVX2 is also required).\n\nThis PR fixes the bit being tested to match the non-Windows code.\n"
    },
    {
      "commit": "c49b7f7a198993c64d1a6a55f051f5dc6d1c26bd",
      "tree": "e15e8d3cf19809ee687ee053a88d2be9b25d59fd",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:37:29 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:37:47 2026 +0900"
      },
      "message": "openssl: handle failure of ASYNC_WAIT_CTX_new\n\n`async_sign_ctx_new` did not check the return value of `ASYNC_WAIT_CTX_new`. When it failed due to memory allocation failure, the asynchronous job was started with the wait context being NULL, which would be dereferenced by `ASYNC_WAIT_CTX_get_all_fds` when the application calls `async_sign_ctx_get_fd` to obtain the file descriptor to wait on.\n\nThis PR makes `async_sign_ctx_new` fail in such case, which is handled by the caller as PTLS_ERROR_NO_MEMORY. The EVP_MD_CTX is not freed by `async_sign_ctx_new` on failure, as the caller frees it.\n"
    },
    {
      "commit": "d5f1e33212e1ee919b3f7e1357ce90d6747f4d97",
      "tree": "26615cb74dd33d2308bf7809abbd85becb20ea0e",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:37:04 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:37:04 2026 +0900"
      },
      "message": "openssl: check the result of asynchronous signing\n\nWhen the asynchronous signing job finished, `do_sign_async` emitted the signature without checking the value returned by the job (i.e., that of `EVP_DigestSignFinal`), which `ASYNC_start_job` stores in `ret`. Therefore, when signing failed, the zero-filled signature buffer was sent in CertificateVerify, whereas the synchronous code path returns PTLS_ERROR_LIBRARY.\n\nThis PR checks the return value and fails the same way as the synchronous code path.\n"
    },
    {
      "commit": "8cc9f2f4280c6dcf99a80f4631bd7db4a832863a",
      "tree": "2e38be323a0c481717ec3a33c9674c50acbd88f6",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:36:28 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:36:28 2026 +0900"
      },
      "message": "ffx: fix crash when ptls_ffx_setup_crypto fails\n\nWhen `ptls_ffx_setup_crypto` failed (i.e., when the underlying cipher could not be instantiated), it called `ffx_dispose` on the context being set up. But as the context had not been set up, the assertion in `ffx_dispose` (`ctx-\u003esuper.do_dispose \u003d\u003d ffx_dispose`) always failed. In builds without assertions, `ffx_dispose` would have freed `ctx-\u003eenc_ctx`, which is left uninitialized when the context is allocated by `ptls_cipher_new`.\n\nThere is nothing to be cleaned up at that point; `enc_ctx` is NULL whenever the function fails, and nothing else has been assigned to the context. This PR removes the call.\n"
    },
    {
      "commit": "3aba6852aaae14d6e2e8d6fc2d547fc39b76d432",
      "tree": "81c5152593bf88fc1f3635b8b08c9bd58b9fede1",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:35:55 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:35:55 2026 +0900"
      },
      "message": "ffx: fix the number of bits being enciphered when bit_length is not a multiple of 8\n\nWhen `bit_length` is not a multiple of 8, FFX is supposed to encipher the `bit_length % 8` most significant bits of the last byte and leave the remaining bits untouched; ffx.h states that, when the block length is 39, the least significant bit of the fifth byte is copied from the input to the output.\n\nHowever, the mask table was reversed; the mask being selected for `bit_length % 8 \u003d\u003d r` had `8 - r` bits set instead of `r`. Consequently, for a block length of 39, only the most significant bit of the fifth byte was enciphered, and for a block length of 57, 7 bits of the last byte were enciphered (i.e., 63 bits in total).\n\nThis PR fixes the table, along with the test, which was checking for the incorrect behavior.\n\nNote that the fix changes the output of FFX when `bit_length` is not a multiple of 8.\n"
    },
    {
      "commit": "f03c26a88ab92bcad1b2dbf7db3d23753ecd232c",
      "tree": "c90fe60187f164236676f17a82b32a809f7622e8",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:34:40 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:34:40 2026 +0900"
      },
      "message": "copy only the bytes being derived when updating the traffic key\n\n`update_traffic_key` derives the next traffic secret into a local buffer of `PTLS_MAX_DIGEST_SIZE` bytes, of which only `digest_size` bytes are written by HKDF-Expand-Label, then copied the entire buffer to the traffic protection context. The bytes beyond `digest_size` were uninitialized and never used, but copying them was wasteful and confuses static analyzers.\n\nThis PR copies `digest_size` bytes only.\n"
    },
    {
      "commit": "2ba4d810de84ffc91636ef7f2ce354344b359158",
      "tree": "0575204d7b29f664a69201c213fb368c747d0d21",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:34:15 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:34:15 2026 +0900"
      },
      "message": "server: remove always-true condition when selecting key share\n\nIn `server_handle_hello`, the key share is selected only if `key_share.algorithm \u003d\u003d NULL`, but the variable is initialized to NULL at the beginning of the function and is not assigned until this point, so the condition is always true.\n\nThe condition was added when ESNI could set the key share before reaching this point; the ESNI code has since been removed.\n"
    },
    {
      "commit": "13b5085277aa379796e3a7c0b3886aa32707bb3a",
      "tree": "ded2bdcb70f240a06835b7637ce6a4d454a49d8c",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:33:36 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:33:36 2026 +0900"
      },
      "message": "server: remove redundant check when setting up ECH\n\nIn `server_handle_hello`, the condition for obtaining the AEAD context for opening ClientHelloInner tested `ch-\u003eech.payload.base !\u003d NULL`, which is always true there, as the code sits inside the block that is entered only when the condition holds.\n"
    },
    {
      "commit": "aef9830d83dd619de46655edb02a79966c1744b5",
      "tree": "5467789f74e3926884a6918a1953ba5e2f1579b2",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:33:11 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:33:11 2026 +0900"
      },
      "message": "remove stray semicolon from the buffer_push_extension macro\n\nThe `buffer_push_extension` macro ended with `while (0);`, so every use (which is followed by a semicolon) expanded to an extra empty statement, defeating the purpose of the `do { ... } while (0)` idiom; e.g., the macro could not be used as the body of an if statement followed by else.\n"
    },
    {
      "commit": "39e5fdb4a4a7fdfb4b04e252612a84b729a473af",
      "tree": "5fcc7ba8e7643e5db453a487b0eab802a921ff4b",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:32:38 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:32:38 2026 +0900"
      },
      "message": "openssl: remove unused variable in ptls_openssl_create_key_exchange\n\nThe key type returned by `EVP_PKEY_id` was assigned to `id` but never used other than as the controlling expression of the switch statement.\n"
    },
    {
      "commit": "bc96c860b20a8700b50cc86577eb03e6d162d60f",
      "tree": "400a590613bf496f50f54a5156aaabd7daf5ac3c",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:32:11 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:32:11 2026 +0900"
      },
      "message": "libaegis: clear the cipher state when disposing of the AEAD context\n\nThe dispose functions of the AEGIS-128L and AEGIS-256 AEAD contexts cleared the key but not `st`, the state of the last encryption / decryption operation, which is derived from the key and the nonce. That state was left in memory being freed.\n\nThis PR clears the state as well.\n"
    },
    {
      "commit": "72923565208e87e360015dfdbee112130802d890",
      "tree": "b7f4953152108311d60de5ff11bb8d37990e2deb",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:31:47 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:31:47 2026 +0900"
      },
      "message": "ECH: handle failure to create the AEAD context when greasing\n\n`client_setup_ech_grease` did not check the return value of `ptls_aead_new_direct`. When it failed (i.e., memory allocation failure), the function returned with the ECH state being half set up; `aead` being NULL while `enc` and other fields are set.\n\nThis PR treats the failure the same way as the other failures in the function, by clearing the ECH state.\n"
    },
    {
      "commit": "cbf2b098dbb64b11ea4f6e791f6c174263eba359",
      "tree": "e66ca2d344f96a63dc47566fb7183d90abe896c1",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:31:15 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:31:15 2026 +0900"
      },
      "message": "openssl: fix memory leak in verify_cert when building the chain fails\n\n`verify_cert` converts each intermediate certificate to X509 and pushes it to the stack used as the chain, but ignored the return value of `sk_X509_push`. When the push failed (i.e., memory allocation failure, including the case where `sk_X509_new_null` has failed and `chain` is NULL), the X509 object was leaked, and the verification continued with an incomplete chain.\n\nThis PR frees the certificate and returns PTLS_ERROR_NO_MEMORY when the push fails.\n"
    },
    {
      "commit": "1c1dc08e4c73d2bb84e1bd4dbb7f80d88134e93a",
      "tree": "18f39f0528501965bdc6db56931071eef1ae9d97",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:30:40 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:30:40 2026 +0900"
      },
      "message": "server: check the errors returned by key_schedule_extract\n\nIn `server_handle_hello`, the return value of `key_schedule_extract` was ignored at four places, while the function can fail when HKDF fails (e.g., due to memory allocation failure in the hash backend). In such case the handshake would have continued using a key schedule that has not been updated correctly.\n\nThis PR checks the return value at all the four places, as is done elsewhere.\n"
    },
    {
      "commit": "e7ba43394fa6fbd23ddc45cc3be1560d9afa32c9",
      "tree": "1c1e070154c0a3bf27fe38e6a8df789858d13efc",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:30:03 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:30:03 2026 +0900"
      },
      "message": "client: check the error returned by send_finished\n\nIn `client_handle_finished`, the value returned by `send_finished` was assigned to `ret` and then overwritten by the call to `setup_traffic_protection` that follows, so failure to emit the client\u0027s Finished message (e.g., due to memory allocation failure) was ignored and the handshake continued without sending Finished.\n\nThis PR checks the return value, as is done in the server-side counterpart.\n"
    },
    {
      "commit": "99964d8f2a2867f579a7ffe6e041c8a967c721bc",
      "tree": "a5e6695eb9feb0676df0027412f709e05efd4a64",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:29:39 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:29:39 2026 +0900"
      },
      "message": "fix NULL dereference in send_session_ticket upon memory allocation failure\n\n`send_session_ticket` backs up the transcript hash by cloning it, then modifies the transcript to calculate the resumption secret, and at the end restores the backup. The result of the clone was not checked, so when the clone failed due to memory allocation failure, NULL was installed as the transcript hash context, causing a crash when the transcript is updated next.\n\nThis PR returns PTLS_ERROR_NO_MEMORY when the clone fails, before modifying any state.\n"
    },
    {
      "commit": "3c028c013f022fd1c6765119ae6d0301eddf9e7d",
      "tree": "522ea50a4d907fac8391749e269878a1f895921c",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:29:13 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:29:13 2026 +0900"
      },
      "message": "fix memory leak in key_schedule_new when creating the outer hash context fails\n\nWhen `use_outer` is set, `key_schedule_new` creates two hash contexts (`ctx` and `ctx_outer`) for each hash algorithm, and increments `num_hashes` after both are created. When creation of `ctx_outer` failed, `key_schedule_free` was called without `num_hashes` covering the current slot, therefore the `ctx` that had just been created was leaked.\n\nThis PR frees that `ctx` before bailing out. The leak happens only on memory allocation failure when ECH is used.\n"
    },
    {
      "commit": "745619dabdd0c057d8add14f29b72f321aede193",
      "tree": "970291fdcb78ee9bde0848d8a11152035786c81b",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:28:41 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:28:41 2026 +0900"
      },
      "message": "openssl: fix double free of EC_KEY when ptls_openssl_create_key_exchange fails\n\nWhen `ptls_openssl_create_key_exchange` is given an EC key, it passes the EC_KEY to `x9_62_init_key`, and frees the EC_KEY if that function fails. However, `x9_62_init_key` has already attached the EC_KEY to the context being created, and the context, including the EC_KEY, is freed by `x9_62_free_context` when the setup of the public key fails (i.e. on memory allocation failure). Hence the EC_KEY was freed twice.\n\nThis PR changes `x9_62_init_key` to leave the EC_KEY untouched on failure, as is done by `evp_keyex_init` for EVP_PKEY.\n"
    },
    {
      "commit": "99bca67bc528b60ee5ffb838eb62e9d4ebf38fc4",
      "tree": "f4a595cc22fbd772f21b67afe2f8fa804820f8f4",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:28:13 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:28:13 2026 +0900"
      },
      "message": "hpke: report an error when the AEAD context cannot be created\n\n`key_schedule` stored the return value of `ptls_aead_new_direct` without checking it. When that function failed (e.g., due to memory allocation failure), `ptls_hpke_setup_base_s` and `ptls_hpke_setup_base_r` returned success while setting `*ctx` to NULL, leading to the caller dereferencing NULL when using the context.\n\nThis PR returns PTLS_ERROR_NO_MEMORY in such case, as is done when `ptls_aead_new_direct` fails in `setup_traffic_protection`.\n"
    },
    {
      "commit": "b9c89c4416c88c69f57f2c2f65c6c6fc9db906d0",
      "tree": "7a92f3add757b28646e5bedbd4f4fe297d2583d2",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:27:46 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:27:46 2026 +0900"
      },
      "message": "base64: reject non-blank characters following the padding\n\nAfter decoding the final quantum that contains padding, `ptls_base64_decode` is supposed to check that only blanks follow on the line, and fail otherwise. However, the loop doing the check consumed every character until the end of the line regardless of whether it was blank, so the check always succeeded; e.g., \"QQ\u003d\u003dx\" was decoded successfully as \"A\".\n\nThis PR fixes the loop to stop at the first non-blank character, so that such input is rejected with PTLS_ERROR_INCORRECT_BASE64. The loop now has the same form as the one that skips the trailing blanks earlier in the function.\n"
    },
    {
      "commit": "99699a28bec758f7cf610608a0f0c15101bd1ecb",
      "tree": "7904bebff7be6b8e0d99e14ccb098264cada38c8",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:26:58 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:26:58 2026 +0900"
      },
      "message": "ECH: fix the amount of padding when SNI is present\n\nSection 6.1.3 of the ECH specification (draft-ietf-tls-esni-15 and later, as well as the RFC) requires the client to add max(0, L - D) bytes of padding when ClientHelloInner contains a server_name extension with a name of length D, where L is `maximum_name_length` of the ECHConfig. The aim is to make the length of the server name invisible, by padding the name to L bytes.\n\nThe client added max(D, L) bytes instead. As ClientHelloInner already contains the name, the padded length still varied with D (being D + L when D \u003c L), leaking the length of the server name up to the 32-byte rounding that follows.\n\nThis PR changes the computation to max(0, L - D).\n"
    },
    {
      "commit": "d827c518b3719241525018e3a284fdde786ddc2a",
      "tree": "03111e5e132060348feeeffe25e19b705c28f6c8",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:26:32 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:26:32 2026 +0900"
      },
      "message": "fix memory leak in client_setup_ech\n\n`client_setup_ech` builds the HPKE info (the \"tls ech\" prefix followed by the ECHConfig) in `infobuf`, which starts with a 256-byte stack buffer, but never disposes of it. When the ECHConfig is large enough for the buffer to be reallocated on the heap, the heap memory is leaked each time a client connection is set up with ECH.\n\nThis PR disposes of the buffer before returning.\n"
    },
    {
      "commit": "ebadde52381e0374e5b12e1d711564ec38191e91",
      "tree": "24b77889d98d41860b2b5e5dddd12183432cdbbc",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:26:07 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:26:07 2026 +0900"
      },
      "message": "propagate the error code returned by the on_extension callback\n\nAt all the six places where the `on_extension` callback is invoked, the closing parenthesis was misplaced, as in `(ret \u003d cb(...) !\u003d 0)`, so that `ret` was assigned the result of the comparison. Therefore, when the callback returned an error, the handshake was aborted with error code 1 (an alert number that does not exist) instead of the value returned by the callback.\n\nThis PR fixes the parentheses so that the error code returned by the callback is propagated.\n"
    },
    {
      "commit": "b7ea10df338d8d8719acd7e9eb5b50c5dd102f2f",
      "tree": "c6cf07e990c6cd130dac8c005ee56188af26a13b",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:25:34 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:25:34 2026 +0900"
      },
      "message": "client: do not save session tickets when no key share is available\n\nWhen a client using an external PSK without any key exchange algorithms (i.e., psk_ke mode with `ptls_context_t::key_exchanges` being NULL) receives a NewSessionTicket and `save_ticket` is set, `client_handle_new_session_ticket` dereferences `tls-\u003ekey_share`, which is NULL, to record the ID of the key exchange.\n\nSuch tickets cannot be used anyway; session resumption is attempted only when `key_exchanges` is non-NULL, and the key share recorded in the ticket is mandatory when decoding it.\n\nThis PR skips saving the ticket when there is no key share, the same way as when `save_ticket` is not set.\n"
    },
    {
      "commit": "a9601b6b68c9895d7523fd17f36d38bbd8bf4f23",
      "tree": "32b9e0e1afe6db5a511db841f27f67a9f274ac8c",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:24:59 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:24:59 2026 +0900"
      },
      "message": "apply per-connection log filters when the connection state is up to date\n\n`ptls_log__do_write_end` determines which log fds an event is written to by AND-ing the bits of the log point and those of the connection. However, the bits of the connection were applied only when the connection state was stale and had to be recalculated.\n\nAs `PTLS_LOG_CONN` calls `ptls_log_conn_maybe_active` before emitting the event (which refreshes the connection state), the state is usually up to date when `ptls_log__do_write_end` is called. Consequently, when multiple log fds are attached, events were written to every fd whose point filter matched, regardless of the per-connection filters (sample ratio, SNI, address) of each fd.\n\nThis PR applies the connection bits regardless of whether the state had to be recalculated.\n"
    },
    {
      "commit": "2976e31a1c3ae434869d567d35f1bce7cd742a19",
      "tree": "a259fbaa2a0041682a5c641b217b64a5619720f0",
      "parents": [
        "df495abedb451babd23ab9762d6ce1e8e2defcab"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:24:03 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 13:24:03 2026 +0900"
      },
      "message": "check the length of the PSK binder when using an external PSK\n\nWhen an external PSK is configured, `try_psk_handshake` accepted an identity matching the configured one without checking the length of the corresponding binder. The resumption path rejects binders whose length differs from the digest size, but the external-PSK path did not, causing two problems:\n\n* When the binder is shorter than the digest size, `ptls_mem_equal` reads past the end of the binder when verifying it. This happens before the peer is authenticated.\n* When the binder is longer than the digest size (up to 255 bytes) and has the correct HMAC as its prefix, the binder is accepted, and `server_handle_hello` copies all of it into `properties-\u003eserver.selected_psk_binder.base`, which is `PTLS_MAX_DIGEST_SIZE` (64) bytes long.\n\nThis PR applies the same length check to the external-PSK path. As is the case with the resumption path, an identity with a binder of wrong size is skipped.\n"
    },
    {
      "commit": "df495abedb451babd23ab9762d6ce1e8e2defcab",
      "tree": "d81e664ae7066e83f4982e9c25b1ceaa2a474532",
      "parents": [
        "8dbb4d40ee4065dd099e591e99ac706614fc12de",
        "2109d72292084f3b402ead673438a40f9d799c71"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 11:35:32 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 11:35:32 2026 +0900"
      },
      "message": "Merge pull request #627 from pascaldekloe/null_new\n\nNULL handing in new_*"
    },
    {
      "commit": "2109d72292084f3b402ead673438a40f9d799c71",
      "tree": "ec1f66dd976d318c45e56d64519a357fb1e62d47",
      "parents": [
        "81ec2ad59228093105dcebd7f3ff086b6082e27e"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 10:35:05 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 10:35:05 2026 +0900"
      },
      "message": "use early return for NULL check in ptls_{client,server}_new\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "8dbb4d40ee4065dd099e591e99ac706614fc12de",
      "tree": "a013cc08f2840745b1dc9d295dbd73c756a730ed",
      "parents": [
        "2d4f5d69edfafdfdfbd892cc027c5525adfef625",
        "b12809be4a4bf0525fba68abd89ec9a2708ef36a"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 10:28:52 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 10:28:52 2026 +0900"
      },
      "message": "Merge pull request #630 from shivampwm2020/fix-unexpected-message-alerts\n\nfix alert code for unexpected handshake messages in server handshake states"
    },
    {
      "commit": "b12809be4a4bf0525fba68abd89ec9a2708ef36a",
      "tree": "089ac618a7cfef82d7ebdaf3069f9d33594a8773",
      "parents": [
        "6ad04c6701b95d3be2aa719714404ee921e51ec5"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 10:10:12 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 10:10:12 2026 +0900"
      },
      "message": "remove test that only asserts the alert constants being changed\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "2d4f5d69edfafdfdfbd892cc027c5525adfef625",
      "tree": "c459be62e4b6ad01e63a76a3272c0a0cedab0d44",
      "parents": [
        "112054bc74e6d2be646421a7a134ebdf7ea038f9",
        "2aed7fe3612fac234988e2acdcaeafb9a5c9463f"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Oct 19 09:45:46 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 09:45:46 2026 +0900"
      },
      "message": "Merge pull request #631 from sleepybishop/cpudetfix\n\nrequire both vaes and vpclmulqdq for 256-bit fusion mode"
    },
    {
      "commit": "2aed7fe3612fac234988e2acdcaeafb9a5c9463f",
      "tree": "c459be62e4b6ad01e63a76a3272c0a0cedab0d44",
      "parents": [
        "112054bc74e6d2be646421a7a134ebdf7ea038f9"
      ],
      "author": {
        "name": "joseph calderon",
        "email": "calderon.joe@gmail.com",
        "time": "Sun Oct 18 08:40:57 2026 -0700"
      },
      "committer": {
        "name": "joseph calderon",
        "email": "calderon.joe@gmail.com",
        "time": "Sun Oct 18 08:40:57 2026 -0700"
      },
      "message": "require both vaes and vpclmulqdq for 256-bit fusion mode\n"
    },
    {
      "commit": "6ad04c6701b95d3be2aa719714404ee921e51ec5",
      "tree": "5520d08e2880756bc03db3970807e4b0d4e1752f",
      "parents": [
        "112054bc74e6d2be646421a7a134ebdf7ea038f9"
      ],
      "author": {
        "name": "Shivam Maurya",
        "email": "shivam@programmingwithmaurya.com",
        "time": "Thu Oct 15 08:27:10 2026 +0530"
      },
      "committer": {
        "name": "Shivam Maurya",
        "email": "shivam@programmingwithmaurya.com",
        "time": "Thu Oct 15 08:27:10 2026 +0530"
      },
      "message": "fix alert code for unexpected handshake messages in server handshake states\n\nPer RFC 8446 Section 4, a peer receiving a handshake message in an\nunexpected order MUST abort with an \"unexpected_message\" alert. The\nCLIENT_HELLO and FINISHED states of handle_server_handshake_message()\nreturned PTLS_ALERT_HANDSHAKE_FAILURE instead, unlike the other states\nof the same function (which return PTLS_ALERT_UNEXPECTED_MESSAGE) and\nunlike handle_client_handshake_message().\n\nThis also adds a unit test covering the alert code returned by\nhandle_server_handshake_message() for unexpected message types in all\nserver handshake states.\n\nFixes #612\n\nSigned-off-by: Shivam Maurya \u003cshivam@programmingwithmaurya.com\u003e\n"
    },
    {
      "commit": "112054bc74e6d2be646421a7a134ebdf7ea038f9",
      "tree": "50c383f53a0037686dd0d0b5e4f628da87be6410",
      "parents": [
        "f06553b877ada93c860dd1db9002eabf7365292d",
        "e3fc73a05911a60817b1ba791ea259b146228be6"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Thu Oct 15 09:24:00 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 09:24:00 2026 +0900"
      },
      "message": "Merge pull request #629 from h2o/kazuho/css-right-after-hrr\n\nin compatibility mode, CSS goes right after HRR"
    },
    {
      "commit": "e3fc73a05911a60817b1ba791ea259b146228be6",
      "tree": "50c383f53a0037686dd0d0b5e4f628da87be6410",
      "parents": [
        "f06553b877ada93c860dd1db9002eabf7365292d"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Thu Oct 15 09:03:53 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Thu Oct 15 09:03:53 2026 +0900"
      },
      "message": "in compatibility mode, CSS goes right after HRR\n"
    },
    {
      "commit": "81ec2ad59228093105dcebd7f3ff086b6082e27e",
      "tree": "b1d48f810987ec31be4140538d3802ac28bb2e98",
      "parents": [
        "f06553b877ada93c860dd1db9002eabf7365292d"
      ],
      "author": {
        "name": "Pascal S. de Kloe",
        "email": "pascal@quies.net",
        "time": "Mon Oct 05 19:11:07 2026 +0200"
      },
      "committer": {
        "name": "Pascal S. de Kloe",
        "email": "pascal@quies.net",
        "time": "Mon Oct 05 19:11:07 2026 +0200"
      },
      "message": "NULL handing in new_*\n"
    },
    {
      "commit": "f06553b877ada93c860dd1db9002eabf7365292d",
      "tree": "c4ab78db6298b87e5aabea5e6c41e168ae974cd4",
      "parents": [
        "34138f383306a3fec90e24af60c83090f723b990",
        "eaeaec88529154d1faea4f0f0b2504f319a75ab3"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Wed Sep 30 10:47:27 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 10:47:27 2026 +0900"
      },
      "message": "Merge pull request #626 from h2o/kazuho/probe-smallints-ilp64\n\nRemove PTLS_IS_SIGNED, which reports unsigned types narrower than `unsigned` as signed"
    },
    {
      "commit": "eaeaec88529154d1faea4f0f0b2504f319a75ab3",
      "tree": "c4ab78db6298b87e5aabea5e6c41e168ae974cd4",
      "parents": [
        "34138f383306a3fec90e24af60c83090f723b990"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Wed Sep 30 10:24:22 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Wed Sep 30 10:24:22 2026 +0900"
      },
      "message": "remove PTLS_IS_SIGNED as it returns true when given unsigned types smaller than `unsigned`; code the expression directly and emit using %u or %d if they fit sizeof(int), the latter is theoretical improvement except on ILP64\n"
    },
    {
      "commit": "34138f383306a3fec90e24af60c83090f723b990",
      "tree": "ce3bc7c2bb8c713a8bb3dba35991694d8f3523f4",
      "parents": [
        "4ea82c8fa1dd5895d1e27c213e17347914b40113",
        "1615399d37f8f087b798ed232c329f57a581e999"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 29 14:03:45 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 14:03:45 2026 +0900"
      },
      "message": "Merge pull request #625 from h2o/kazuho/i-told-claude-to-not-leave-deprecated\n\nremove unnecessary preservation of \"deprecated\" macros"
    },
    {
      "commit": "1615399d37f8f087b798ed232c329f57a581e999",
      "tree": "ce3bc7c2bb8c713a8bb3dba35991694d8f3523f4",
      "parents": [
        "4ea82c8fa1dd5895d1e27c213e17347914b40113"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 29 13:52:48 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 29 13:52:48 2026 +0900"
      },
      "message": "API compat has never been the goal\n"
    },
    {
      "commit": "4ea82c8fa1dd5895d1e27c213e17347914b40113",
      "tree": "8cc09f539cee5e11a078a26886b828e06d8dfe92",
      "parents": [
        "df11038f6adb7cdb6c0480cc1c7dd60ff5316406",
        "5fdc1f59589411b32b8feb35d55c0f2229d50363"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 29 13:19:24 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 13:19:24 2026 +0900"
      },
      "message": "Merge pull request #624 from h2o/kazuho/detect-signedness\n\nunify the element logger macro"
    },
    {
      "commit": "5fdc1f59589411b32b8feb35d55c0f2229d50363",
      "tree": "8cc09f539cee5e11a078a26886b828e06d8dfe92",
      "parents": [
        "df11038f6adb7cdb6c0480cc1c7dd60ff5316406"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 29 13:06:08 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 29 13:06:08 2026 +0900"
      },
      "message": "merge PTLS_LOG_ELEMENT_SIGNED and PTLS_LOG_ELEMENT_UNSIGNED to PTLS_LOG_ELEMENT_NUMBER, thereby covering u?int(32|64)_t, float, and double in one macro\n"
    },
    {
      "commit": "df11038f6adb7cdb6c0480cc1c7dd60ff5316406",
      "tree": "5e33601a510f9da343e0b0c9514a181d5468b6c5",
      "parents": [
        "d957407248e8064b74f3cb49b0a029d411988495",
        "653d506c7052a849940b6082cea4d04f1c361bed"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 29 12:14:18 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 12:14:18 2026 +0900"
      },
      "message": "Merge pull request #623 from h2o/kazuho/ptlslog-float\n\n[ptlslog] add support for float (such as quicly\u0027s new RTT measurements)"
    },
    {
      "commit": "653d506c7052a849940b6082cea4d04f1c361bed",
      "tree": "5e33601a510f9da343e0b0c9514a181d5468b6c5",
      "parents": [
        "d957407248e8064b74f3cb49b0a029d411988495"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 29 11:35:22 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 29 11:47:34 2026 +0900"
      },
      "message": "[ptlslog] add support for float (such as quicly\u0027s new RTT measurements)\n"
    },
    {
      "commit": "d957407248e8064b74f3cb49b0a029d411988495",
      "tree": "d8806a660419834ab3d108c2ae4766ac8b1bded9",
      "parents": [
        "d6c3da61b47cc3ccecaf9aa093c24e4aafebd52a",
        "583546fbcc8e7af87292b8e4c8acfd22ecf91b3b"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Sep 28 11:26:27 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 11:26:27 2026 +0900"
      },
      "message": "Merge pull request #622 from h2o/kazuho/fusion-rewrite-transformH\n\nreplace transformH with a newly written function from scratch, thereby dropping Apache Lisence"
    },
    {
      "commit": "583546fbcc8e7af87292b8e4c8acfd22ecf91b3b",
      "tree": "d8806a660419834ab3d108c2ae4766ac8b1bded9",
      "parents": [
        "d6c3da61b47cc3ccecaf9aa093c24e4aafebd52a"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Sep 28 11:11:49 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Sep 28 11:11:49 2026 +0900"
      },
      "message": "replace transformH with a newly written function from scratch; the transformation itself comes from the algorithm defined in https://crypto.stanford.edu/RealWorldCrypto/slides/gueron.pdf, as the source code already refers to\n"
    },
    {
      "commit": "d6c3da61b47cc3ccecaf9aa093c24e4aafebd52a",
      "tree": "3123638a8c69b996b863ab75b5d9ef66d6ce39cf",
      "parents": [
        "3598470df01264da85157025ed10db0f7e103790",
        "c18e1a707969a1596a369e9092b4756d57631eda"
      ],
      "author": {
        "name": "Christian Huitema",
        "email": "huitema@huitema.net",
        "time": "Thu Sep 24 19:36:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 19:36:57 2026 -0700"
      },
      "message": "Merge pull request #621 from red5pro/shared-libraries\n\ncmake: support building the picotls libraries as shared libraries"
    },
    {
      "commit": "c18e1a707969a1596a369e9092b4756d57631eda",
      "tree": "3123638a8c69b996b863ab75b5d9ef66d6ce39cf",
      "parents": [
        "3598470df01264da85157025ed10db0f7e103790"
      ],
      "author": {
        "name": "p",
        "email": "d@e.invalid",
        "time": "Thu Sep 24 15:30:23 2026 +0000"
      },
      "committer": {
        "name": "Paul Gregoire",
        "email": "mondain@gmail.com",
        "time": "Thu Sep 24 10:34:08 2026 -0700"
      },
      "message": "cmake: support building the picotls libraries as shared libraries\n\nThe library targets are declared without a STATIC/SHARED keyword, so\nCMake\u0027s standard BUILD_SHARED_LIBS variable already selects the library\ntype; surface it as an explicit option (default OFF, preserving static\nbuilds) and fix the two issues that made the resulting shared objects\nunusable or incomplete:\n\n- picotls-mbedtls declared no dependencies at all, so a shared build\n  produced a library with no DT_NEEDED entries and unresolved\n  ptls_*/mbedtls_* symbols. Link picotls-core and MBEDTLS_LIBRARIES on\n  the target; static consumers also benefit by inheriting the\n  dependencies transitively. (The other backends already linked\n  picotls-core.)\n\n- The headers carry no dllexport annotations, so a Windows DLL build\n  produced no import libraries. Set WINDOWS_EXPORT_ALL_SYMBOLS on every\n  library target; this is CMake\u0027s supported mechanism for unannotated\n  code and has no effect on static or non-Windows builds. The standard\n  data-symbol caveat applies but the public API is function-based.\n\nVerified on Linux: static build unchanged; BUILD_SHARED_LIBS\u003dON\nproduces libpicotls-{core,minicrypto,openssl,fusion,mbedtls}.so, with\npicotls-mbedtls now carrying DT_NEEDED for picotls-core and mbedtls\n(pristine: none, 12 unresolved symbols); test-minicrypto.t passes and\ncli links against the shared libraries.\n"
    },
    {
      "commit": "3598470df01264da85157025ed10db0f7e103790",
      "tree": "1ed1fd16cbe2f148e0ac7a61b30c7b9c2469accf",
      "parents": [
        "d08b0c5c7392f3397bf92f592d3ca12ee1b8d33a",
        "b777a84d343e6c2523d282ab618a5a82ab3e7a71"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 17:59:16 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 17:59:16 2026 +0900"
      },
      "message": "Merge pull request #619 from h2o/kazuho/save-ticket-early-data-flag\n\nExpose early-data indication to ticket callbacks"
    },
    {
      "commit": "b777a84d343e6c2523d282ab618a5a82ab3e7a71",
      "tree": "1ed1fd16cbe2f148e0ac7a61b30c7b9c2469accf",
      "parents": [
        "d08b0c5c7392f3397bf92f592d3ca12ee1b8d33a"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 17:47:20 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 17:47:20 2026 +0900"
      },
      "message": "expose early-data indication to ticket callbacks\n"
    },
    {
      "commit": "d08b0c5c7392f3397bf92f592d3ca12ee1b8d33a",
      "tree": "2506db22e129409e085166f1659365e9db4b3b0e",
      "parents": [
        "e7ff709762ecf480e4deb974cbde776cbea977f5",
        "ba509fd21b68a2b3b893a19a7acc225059d8b9b3"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 16:53:32 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 16:53:32 2026 +0900"
      },
      "message": "Merge pull request #618 from h2o/kazuho/pr617-picotls-fixes\n\nfor QUIC compliance, expose max_early_data_size and reject unsupported KeyUpdate"
    },
    {
      "commit": "ba509fd21b68a2b3b893a19a7acc225059d8b9b3",
      "tree": "2506db22e129409e085166f1659365e9db4b3b0e",
      "parents": [
        "f611d1fb8bb83407b5ebcdc90ff712684720b13a",
        "e7ff709762ecf480e4deb974cbde776cbea977f5"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 16:53:00 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 16:53:00 2026 +0900"
      },
      "message": "Merge branch \u0027master\u0027 into kazuho/pr617-picotls-fixes\n"
    },
    {
      "commit": "e7ff709762ecf480e4deb974cbde776cbea977f5",
      "tree": "9b627f09d659042f9e319f658ad0cbdcdb94a803",
      "parents": [
        "f24fbc57f40d1d9a2998e8bf5c61187dd44462ee"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 16:46:00 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 16:46:00 2026 +0900"
      },
      "message": "Revert \"Merge pull request #617 from sleepybishop/quic-rfc-constraints\"\n\nThis reverts commit f24fbc57f40d1d9a2998e8bf5c61187dd44462ee, reversing\nchanges made to f07f1c8c68b237f1468bc1f1fe1b68aba3ff23b4.\n"
    },
    {
      "commit": "f24fbc57f40d1d9a2998e8bf5c61187dd44462ee",
      "tree": "abd5893308bc3725e3291f12cc5ef945436e253a",
      "parents": [
        "f07f1c8c68b237f1468bc1f1fe1b68aba3ff23b4",
        "56ea446ced44ef1a766f4b9d4689e0b0534d316a"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 16:02:55 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 16:02:55 2026 +0900"
      },
      "message": "Merge pull request #617 from sleepybishop/quic-rfc-constraints\n\nenforce quic-specific tls constraints"
    },
    {
      "commit": "f611d1fb8bb83407b5ebcdc90ff712684720b13a",
      "tree": "2506db22e129409e085166f1659365e9db4b3b0e",
      "parents": [
        "dfa7752bd71b3f958b11771795a392a045f05db8"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 15:29:19 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 15:29:19 2026 +0900"
      },
      "message": "expose ticket properties and reject unsupported KeyUpdate\n"
    },
    {
      "commit": "dfa7752bd71b3f958b11771795a392a045f05db8",
      "tree": "a5581244fb3c62606a85c25f144bb6cd92971c5a",
      "parents": [
        "f07f1c8c68b237f1468bc1f1fe1b68aba3ff23b4"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 15:24:01 2026 +0900"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Sep 08 15:24:01 2026 +0900"
      },
      "message": "test custom record layer KeyUpdate rejection\n\nCo-authored-by: sleepybishop \u003ccalderon.joe@gmail.com\u003e\n"
    },
    {
      "commit": "56ea446ced44ef1a766f4b9d4689e0b0534d316a",
      "tree": "d405c61a4b177145e1751c22ed24d3fa186d1646",
      "parents": [
        "2e8015765fcba18afad7623b33e97317152c0890"
      ],
      "author": {
        "name": "joseph calderon",
        "email": "calderon.joe@gmail.com",
        "time": "Sat Sep 05 06:26:45 2026 -0700"
      },
      "committer": {
        "name": "joseph calderon",
        "email": "calderon.joe@gmail.com",
        "time": "Sat Sep 05 06:26:45 2026 -0700"
      },
      "message": "enforce quic-specific tls constraints\n"
    },
    {
      "commit": "f07f1c8c68b237f1468bc1f1fe1b68aba3ff23b4",
      "tree": "9b627f09d659042f9e319f658ad0cbdcdb94a803",
      "parents": [
        "97fe24435de35e081e0326e3b05bae9c1188067d",
        "766c06103ae45655f251148dfea6be0b82462385"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Wed Jul 15 03:43:47 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 03:43:47 2026 +0200"
      },
      "message": "Merge pull request #611 from h2o/kazuho/issue605\n\nfix 3 remaining issues reported in #605"
    },
    {
      "commit": "766c06103ae45655f251148dfea6be0b82462385",
      "tree": "9b627f09d659042f9e319f658ad0cbdcdb94a803",
      "parents": [
        "ab094f7f24e8e8a25a8982bc6fb1c45bc5894f62"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Wed Jul 15 03:29:29 2026 +0200"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Wed Jul 15 03:29:29 2026 +0200"
      },
      "message": "test the needed invariant (that secp256r1 is available)\n"
    },
    {
      "commit": "ab094f7f24e8e8a25a8982bc6fb1c45bc5894f62",
      "tree": "2b173143126801d841ca7e469cf3fde120332231",
      "parents": [
        "d24069a289ce3904a02d3fe6cfd6900d2d062689",
        "97fe24435de35e081e0326e3b05bae9c1188067d"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Jul 14 15:20:06 2026 +0200"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Jul 14 15:20:06 2026 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into kazuho/issue605\n"
    },
    {
      "commit": "d24069a289ce3904a02d3fe6cfd6900d2d062689",
      "tree": "816d309d989e9fc0b81778893cbd67ad96a53fda",
      "parents": [
        "f20f5c87ddf835a625ff97776f80bab10b0a52b1"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Jul 14 15:18:13 2026 +0200"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Jul 14 15:18:13 2026 +0200"
      },
      "message": "test that the selected group of HRR matches that agreed in the 1st flight\n"
    },
    {
      "commit": "97fe24435de35e081e0326e3b05bae9c1188067d",
      "tree": "e293903b460edce12f60a7041f4cb557b14f0e27",
      "parents": [
        "50f650f8c3b3f9caf443407a05d1a5b0913da0f8",
        "81da2dafa2e57756b2f4649b7c0e102a56477449"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Jul 14 14:56:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 14:56:45 2026 +0200"
      },
      "message": "Merge pull request #610 from h2o/kazuho/ci-remove-macos-openssl1.1\n\ndrop macOS/openssl1.1 from the CI matrix"
    },
    {
      "commit": "50f650f8c3b3f9caf443407a05d1a5b0913da0f8",
      "tree": "4cb068d66045c8ccf73fb361e217b73ca7c95468",
      "parents": [
        "a06ca417a16f9126808bf5cabe6c5e6e0f16ecae",
        "ca91df56a73c8dd035bf5eb6ed3e018964a945b9"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Tue Jul 14 14:56:35 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 14:56:35 2026 +0200"
      },
      "message": "Merge pull request #609 from h2o/kazuho/fix-windows-warnings\n\nfix warnings on Windows"
    },
    {
      "commit": "f20f5c87ddf835a625ff97776f80bab10b0a52b1",
      "tree": "7085487228f4dbe3e3272dbd787a96259e613e93",
      "parents": [
        "efc06dc53287426be44b214e904774318df6936a"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Jul 13 09:22:44 2026 +0200"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Jul 13 09:22:44 2026 +0200"
      },
      "message": "ptls_send checks for misuse (e.g., called after ServerHello is received)\n"
    },
    {
      "commit": "efc06dc53287426be44b214e904774318df6936a",
      "tree": "96709dea21ae595b179dbc7f41e1c397a17b2eb3",
      "parents": [
        "a06ca417a16f9126808bf5cabe6c5e6e0f16ecae"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Jul 13 12:13:03 2026 +0800"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Mon Jul 13 12:13:03 2026 +0800"
      },
      "message": "reject encrypted Alert/Handshake records with an empty payload (Section 5.4 of RFC 8446)\n"
    },
    {
      "commit": "81da2dafa2e57756b2f4649b7c0e102a56477449",
      "tree": "21a1e7b28d17ec74a9edb2ba5b2f1b669ae7e0c0",
      "parents": [
        "a06ca417a16f9126808bf5cabe6c5e6e0f16ecae"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Sun Jul 12 20:15:14 2026 +0800"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Sun Jul 12 20:15:14 2026 +0800"
      },
      "message": "drop macOS/openssl1.1 from the CI matrix; the cask no longer exists in homebrew\n"
    },
    {
      "commit": "ca91df56a73c8dd035bf5eb6ed3e018964a945b9",
      "tree": "4cb068d66045c8ccf73fb361e217b73ca7c95468",
      "parents": [
        "a06ca417a16f9126808bf5cabe6c5e6e0f16ecae"
      ],
      "author": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Sun Jul 12 20:11:32 2026 +0800"
      },
      "committer": {
        "name": "Kazuho Oku",
        "email": "kazuhooku@gmail.com",
        "time": "Sun Jul 12 20:11:32 2026 +0800"
      },
      "message": "use intptr_t for file descriptor abstraction so that Win32 HANDLEs can be retained; fix other warnings too\n"
    }
  ],
  "next": "a06ca417a16f9126808bf5cabe6c5e6e0f16ecae"
}
