)]}'
{
  "log": [
    {
      "commit": "55d20aaa322c9274491cda82c5cd4f99b48c6bcc",
      "tree": "593e234ea50f60701bd069bf4a687cc1fc3087e2",
      "parents": [
        "930dfe0483fb105e8221869e886bc5b10bc26cd3"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 30 17:43:05 2026 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 30 17:43:05 2026 +0300"
      },
      "message": "fix: Handle getter-to-setter aliasing in append-style chunk setters\n\nApply the same class of robustness fix from the previous commit to\n`png_set_text`, `png_set_sPLT` and `png_set_unknown_chunks`. These\nappend-style setters used `png_realloc_array` to grow the internal\narray, then freed the old array before copying from the caller\u0027s\ninput. If the caller\u0027s pointer was obtained from the corresponding\ngetter, it aliased the freed array.\n\nThe fix defers the freeing of the old array until after the copy loop.\n\nAlso extend the pnggetset regression test to cover all three setters.\n"
    },
    {
      "commit": "930dfe0483fb105e8221869e886bc5b10bc26cd3",
      "tree": "3d36cb29410da67e456b64996c35ff98437e6b4f",
      "parents": [
        "398cbe3df03f4e11bb031e07f416dfdde3684e8a"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 30 17:35:30 2026 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 30 17:35:30 2026 +0300"
      },
      "message": "chore: Rerun `./autogen.sh --maintainer`\n"
    },
    {
      "commit": "398cbe3df03f4e11bb031e07f416dfdde3684e8a",
      "tree": "1f921c8bc64cd6306dc1a0349310fda985002882",
      "parents": [
        "2182a677dd02ceb488596261c7c2a515ac1d8f21"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 30 17:35:30 2026 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 30 17:35:30 2026 +0300"
      },
      "message": "fix: Handle self-referencing pointers in getter-to-setter aliasing\n\nApply a robustness fix for a caller-side API usage pattern involving\nthe getters and the setters for PLTE, tRNS, and hIST.\n\nPassing a pointer returned by the PLTE, tRNS, or hIST getters back\ninto the corresponding setters used to cause the setters to read from\na stale pointer. The fix consists in snapshotting the caller\u0027s data\ninto a stack-local buffer before freeing the old internal storage.\n\nFixes pnggroup/libpng#836\n\nReported-by: Iv4n \u003cIv4n550@noreply.github.com\u003e\n"
    },
    {
      "commit": "2182a677dd02ceb488596261c7c2a515ac1d8f21",
      "tree": "3e04c35739ed8e12374d24b7e223cc2852b2d68f",
      "parents": [
        "d5515b5b8be3901aac04e5bd8bd5c89f287bcd33"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Mar 27 20:25:50 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Mar 27 20:25:50 2026 +0200"
      },
      "message": "Bump version to 1.6.57.git\n"
    },
    {
      "commit": "d5515b5b8be3901aac04e5bd8bd5c89f287bcd33",
      "tree": "a28bb962645843af84063c77f574f6d88da79f76",
      "parents": [
        "5f9a0b1e5ed1f096107dfd76fd16217f94a29673"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 25 22:47:06 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 25 22:47:06 2026 +0200"
      },
      "message": "Release libpng version 1.6.56\n"
    },
    {
      "commit": "5f9a0b1e5ed1f096107dfd76fd16217f94a29673",
      "tree": "29bb5c611b4fd109b9883f14ab0c45f58043515c",
      "parents": [
        "2f79003f2d89d9285fde0fe380cb8b2d7c382206"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 25 18:51:09 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 25 18:51:09 2026 +0200"
      },
      "message": "Update the main AUTHORS file\n"
    },
    {
      "commit": "2f79003f2d89d9285fde0fe380cb8b2d7c382206",
      "tree": "886ee5a87fcba6a3176b0ea3ccc4760219783689",
      "parents": [
        "dc1732e37afdee070e5660d9641e202c082a6d1c"
      ],
      "author": {
        "name": "Jeffin820",
        "email": "jeffinphilip14@gmail.com",
        "time": "Fri Mar 13 11:10:48 2026 +0530"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 25 18:33:42 2026 +0200"
      },
      "message": "fix: Use the correct parameter name in `png_file_add_chunk`\n\nThe parameter name in `png_file_add_chunk(pnt_ptr, ...)` was a typo,\nwith the macro body referencing `png_ptr` instead. This caused the\nargument to be effectively unused.\n\nFortunately, this typo was a latent bug with no effect. The sole call\nsite was already passing `png_ptr`, so the macro expansion is identical\nbefore and after this fix.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "dc1732e37afdee070e5660d9641e202c082a6d1c",
      "tree": "b00c8ce2543dc1d0ba70beae813f66c389c15810",
      "parents": [
        "80c0485c276edbefe9cf795c686adf92e45936f0"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Mon Mar 09 22:10:50 2026 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 25 17:22:24 2026 +0200"
      },
      "message": "oss-fuzz: Restrict transformations_fuzzer to transformations\n\nAnd let the other targets focus on the other parts.\n"
    },
    {
      "commit": "80c0485c276edbefe9cf795c686adf92e45936f0",
      "tree": "56934af5178b3c92988d39d72f896623504b2575",
      "parents": [
        "0126d4293e90a4a7bd5e373b8d025d0bc8dbf5dc"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 25 10:42:06 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 25 10:42:06 2026 +0200"
      },
      "message": "chore(test): Add comments and tidy up test definitions\n"
    },
    {
      "commit": "0126d4293e90a4a7bd5e373b8d025d0bc8dbf5dc",
      "tree": "b9dcca0d2e94054a3a789d11a47f79954f52e7bd",
      "parents": [
        "9929ba276ea3f7b4f03fdc0c693997ece3609c5b"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 22:45:09 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 22:45:09 2026 +0200"
      },
      "message": "refactor(test): Avoid undefined pointer arithmetic in pngstest.c\n\nGuard the pointer advance with `y+1 \u003c height` inside the function\n`compare_two_images` to skip this advance on the last iteration.\n\nWith a negative stride, the unconditional `row +\u003d stride` in the\nfor-statement produced a pointer before the allocated object on\nthe final iteration. Standard C permits one-after-end but not\none-before-beginning; this is undefined behavior regardless of\nwhether the pointer is dereferenced or not.\n"
    },
    {
      "commit": "9929ba276ea3f7b4f03fdc0c693997ece3609c5b",
      "tree": "075ad4a56b2fd8861aa5799c38705989f7221428",
      "parents": [
        "a625147f66ece6bcb4be441e3f1071c04ebae7ae"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 21:13:56 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 21:13:56 2026 +0200"
      },
      "message": "refactor: Avoid undefined behavior (signed int overflow) in negations\n\nThe computation of `abs(x)` (where the type of `x` is `png_int_32`)\nshould involve a cast to `png_uint_32` before negating `x`, ensuring\nthat the result is well-defined even for `INT32_MIN`.\n\nConsidering that the PNG Specification (and, implicitly, libpng)\nformally prohibits `INT32_MIN` values, this is merely a zero-cost form\nof hardening intended to appease UBSan, and not an actual bug fix.\n"
    },
    {
      "commit": "a625147f66ece6bcb4be441e3f1071c04ebae7ae",
      "tree": "f434c0318790dcd22af6100d2898b2968ba0b8ab",
      "parents": [
        "98019f6e7054bd4edb1159c3d7771d7462fde369"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 20:41:40 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 20:41:40 2026 +0200"
      },
      "message": "chore: Rerun `./autogen.sh --maintainer`\n"
    },
    {
      "commit": "98019f6e7054bd4edb1159c3d7771d7462fde369",
      "tree": "15d9cc8ae28b4c5aa94473a62b838538974ad81e",
      "parents": [
        "00002286bfdb6731fc2ca4abc76499edb93455eb"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 20:41:12 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 20:41:12 2026 +0200"
      },
      "message": "test: Add negative-stride test coverage to pngstest\n\nAdd the option --negative-stride to pngstest. When set, the row stride\nis negated after buffer allocation but before calling the library, so\nthat `png_image_finish_read` and `png_image_write_to_file` exercise the\nbottom-up (negative stride) code paths.\n\nAdd CI targets for the CMake build and for the configure build:\n\n - pngstest-negative-stride:\n   Bottom-up layout with images covering colormapped, truecolor, alpha,\n   8-bit, 16-bit, and short-height paths.\n - pngstest-negative-stride-extra:\n   Same with --stride-extra 7 for non-aligned padding with bottom-up\n   layout.\n\nNote: the interlaced pngsuite images (`ibasn*.png`) are incompatible\nwith pngstest\u0027s format conversion comparison framework, so the\n`png_image_read_direct_scaled` path (interlaced 16-to-8 conversion) is\nnot exercised by this test. A dedicated test for that path will require\ninterlaced images generated with the correct gamma properties for\npngstest\u0027s comparison logic, which is TODO.\n"
    },
    {
      "commit": "00002286bfdb6731fc2ca4abc76499edb93455eb",
      "tree": "abaec1740049dfb110444f1df65f819a5a8edcde",
      "parents": [
        "1632f041e47c8c1bfc90b37b8f21a62ec7c2ddc0"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 20:06:56 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 20:06:56 2026 +0200"
      },
      "message": "fix(test): Add missing test and tidy up the test list in Makefile.am\n\nAdd `pngstest-large-stride` to the test list in Makefile.am.\n\nThe test `pngstest-large-stride` has a shell script driver in the test\nscript directory, as well as a target in the CMake file, but it hasn\u0027t\nbeen added to the test list in Makefile.am. For this reason, this test\nhasn\u0027t been run by the configure build.\n\nAlso reformat the test list to one entry per line.\n"
    },
    {
      "commit": "1632f041e47c8c1bfc90b37b8f21a62ec7c2ddc0",
      "tree": "b37035bf4e9270639cd223aeaf8d1f529379ed0d",
      "parents": [
        "aba9f18eba870d14fb52c5ba5d73451349e339c3"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 17:04:38 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 23 17:04:38 2026 +0200"
      },
      "message": "refactor(arm): Replace bit shifts and sizeof with plain expressions\n\nReplace hand-strength-reduced idioms to make the source code easier to\nread and to audit:\n\n- Replace `i \u003c\u003c 2` with `i * 4`;\n- Replace `(i \u003c\u003c 1) + i` with `i * 3`;\n- Replace `sizeof(png_color)` with 3;\n- Replace `sizeof(png_uint_32)` with 4;\n- Use `index * CONSTANT` consistently in all stride expressions.\n\nThe optimizing compiler will emit identical machine code.\n\nIn particular, the expression `sizeof(png_uint_32)` used in this context\nwas a semantic misnomer: its value should represent bytes per pixel in\nthe RGBA format, not the size of the underlying integer type.\n"
    },
    {
      "commit": "aba9f18eba870d14fb52c5ba5d73451349e339c3",
      "tree": "b035e057607b2e1e167af5fcd571d847a77e807f",
      "parents": [
        "c1b0318b393c90679e6fa5bc1d329fd5d5012ec1"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Mar 21 23:48:49 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Mar 21 23:48:49 2026 +0200"
      },
      "message": "fix(arm): Resolve out-of-bounds read/write in NEON palette expansion\n\nBoth `png_do_expand_palette_rgba8_neon` and\n`png_do_expand_palette_rgb8_neon` advanced in fixed-size chunks without\nguarding the final iteration, allowing out-of-bounds reads and writes\nwhen the row width is not a multiple of the chunk size.\n\nRestrict the NEON loop to full chunks only, remove the now-unnecessary\npost-loop adjustment, and undo the `*ddp` pre-adjustment before the\npointer handoff to the scalar fallback.\n\nReported-by: Amemoyoi \u003cAmemoyoi@users.noreply.github.com\u003e\nCo-authored-by: Amemoyoi \u003cAmemoyoi@users.noreply.github.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "c1b0318b393c90679e6fa5bc1d329fd5d5012ec1",
      "tree": "59d6145cf44abae84214ccbe435a24882449e0d5",
      "parents": [
        "7ea9eea884a2328cc7fdcb3c0c00246a50d90667"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Mar 20 21:25:12 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Mar 20 21:25:12 2026 +0200"
      },
      "message": "fix: Sync `info_ptr-\u003epalette` after in-place transforms\n\nCopy `png_ptr-\u003epalette` into `info_ptr-\u003epalette` upon entering\nthe function that runs immediately after the in-place transforms.\n\nThe palette decoupling in the previous commit gave `png_struct`\nand `png_info` independently-allocated palette buffers, fixing a\nuse-after-free vulnerability. However, `png_init_read_transformations`\nmodifies `png_ptr-\u003epalette` in place (e.g. for gamma correction or\nbackground compositing), and the old aliasing made those modifications\nvisible through `png_get_PLTE`. With independent buffers,\n`info_ptr-\u003epalette` retained the original values, causing our tests to\nfail on indexed-colour background compositing.\n"
    },
    {
      "commit": "7ea9eea884a2328cc7fdcb3c0c00246a50d90667",
      "tree": "b36f2fbbb298bdf3968fc00a1e33a6fc767a0b17",
      "parents": [
        "a3a21443ed12bfa1ef46fa0d4fb2b74a0fa34a25"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Mar 20 17:37:22 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Mar 20 17:37:22 2026 +0200"
      },
      "message": "fix: Resolve use-after-free on `png_ptr-\u003epalette`\n\nGive `png_struct` its own independently-allocated copy of the palette\nbuffer, decoupling it from `info_struct`\u0027s palette. Allocate both\ncopies with `png_calloc` to zero-fill, because the ARM NEON palette\nriffle reads all 256 entries unconditionally.\n\nIn function `png_set_PLTE`, `png_ptr-\u003epalette` was aliased directly to\n`info_ptr-\u003epalette`: a single heap buffer shared across two structs\nwith independent lifetimes. If the buffer was freed through `info_ptr`\n(via `png_free_data(PNG_FREE_PLTE)` or a second call to `png_set_PLTE`),\n`png_ptr-\u003epalette` became a dangling pointer. Subsequent row reads,\nperformed in `png_do_expand_palette` and in other transform functions,\ndereferenced (and in the bit-shift path, wrote to) freed memory.\n\nAlso fix `png_set_quantize` to allocate an owned copy of the caller\u0027s\npalette rather than aliasing the user pointer, so that the unconditional\nfree in `png_read_destroy` does not free unmanaged memory.\n"
    },
    {
      "commit": "a3a21443ed12bfa1ef46fa0d4fb2b74a0fa34a25",
      "tree": "7a3019d6e2bf40505c5645a868afa33047e51537",
      "parents": [
        "bf7fefe787af624e01df9517e4576c386853c34b"
      ],
      "author": {
        "name": "Oblivionsage",
        "email": "cookieandcream560@gmail.com",
        "time": "Tue Mar 17 08:55:18 2026 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 18 22:57:40 2026 +0200"
      },
      "message": "fix: Initialize tail bytes in `trans_alpha` buffers\n\nAlthough the arrays `info_ptr-\u003etrans_alpha` and `png_ptr-\u003etrans_alpha`\nare allocated 256 bytes, only `num_trans` bytes are copied.\nThe remaining entries were left uninitialized. Set them to 0xff (fully\nopaque) before copying, which matches the conventional treatment of\nentries beyond `num_trans`.\n\nThis is a follow-up to the previous use-after-free fix.\n\nReported-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "bf7fefe787af624e01df9517e4576c386853c34b",
      "tree": "b7bd9532e9121b8a62719703bba9eebb96921438",
      "parents": [
        "23019269764e35ed8458e517f1897bd3c54820eb"
      ],
      "author": {
        "name": "Oblivionsage",
        "email": "cookieandcream560@gmail.com",
        "time": "Tue Mar 17 08:52:55 2026 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 18 22:57:40 2026 +0200"
      },
      "message": "Add Halil Oktay to AUTHORS\n"
    },
    {
      "commit": "23019269764e35ed8458e517f1897bd3c54820eb",
      "tree": "28866b4fb7fd978e76d752e1c86cfab25c96b13a",
      "parents": [
        "0c37b8fbffe779314f3c842e16983ceec5930af1"
      ],
      "author": {
        "name": "Oblivionsage",
        "email": "cookieandcream560@gmail.com",
        "time": "Sun Mar 15 10:35:29 2026 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Mar 18 22:57:40 2026 +0200"
      },
      "message": "fix: Resolve use-after-free on `png_ptr-\u003etrans_alpha`\n\nThe function `png_set_tRNS` sets `png_ptr-\u003etrans_alpha` to point at\n`info_ptr-\u003etrans_alpha` directly, so both structs share the same heap\nbuffer. If the application calls `png_free_data(PNG_FREE_TRNS)`, or if\n`png_set_tRNS` is called a second time, the buffer is freed through\n`info_ptr` while `png_ptr` still holds a dangling reference. Any\nsubsequent row read that hits the function `png_do_expand_palette` will\ndereference freed memory.\n\nThe fix gives `png_struct` its own allocation instead of aliasing the\n`info_ptr` pointer. This was already flagged with a TODO in\n`png_handle_tRNS` (\"horrible side effect ... Fix this.\") but it was\nnever addressed.\n\nVerified with AddressSanitizer. All 34 existing tests pass without\nregressions.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "0c37b8fbffe779314f3c842e16983ceec5930af1",
      "tree": "c7abd8639950867b82d822def0b2534129f84ca4",
      "parents": [
        "753fc9980a3186906ec363de2ab51d95b9322390"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 09 17:55:16 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 09 17:55:16 2026 +0200"
      },
      "message": "oss-fuzz: Fix indentation and rephrase comments in the build script\n\nCo-authored-by: Bob Friesenhahn \u003cbobjfriesenhahn@gmail.com\u003e\n"
    },
    {
      "commit": "753fc9980a3186906ec363de2ab51d95b9322390",
      "tree": "bedcacbd382ae52e077d97da83808a5eb1519196",
      "parents": [
        "e1fa87e72e39d32518d6a5e1cc343fb81f10db44"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Sun Mar 08 22:33:20 2026 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 09 17:24:17 2026 +0200"
      },
      "message": "oss-fuzz: Build the nalloc variants only for the fuzzers that use nalloc\n"
    },
    {
      "commit": "e1fa87e72e39d32518d6a5e1cc343fb81f10db44",
      "tree": "cbe0fd8f0a4b974b3f6451cfe682268d4d27c813",
      "parents": [
        "c0822817b84638fa0b47049633ececb8b085ba25"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Sun Mar 08 22:28:25 2026 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 09 17:24:17 2026 +0200"
      },
      "message": "oss-fuzz: Rename `_nalloc` to `@nalloc` to match the fuzztests naming\n"
    },
    {
      "commit": "c0822817b84638fa0b47049633ececb8b085ba25",
      "tree": "953759589108f12bc1510c0b328c27d46749d450",
      "parents": [
        "905e1f85bacd68cc46c662f0672c561f30d2abbb"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Sun Mar 08 22:10:16 2026 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 09 17:24:17 2026 +0200"
      },
      "message": "oss-fuzz: Use bash in the nalloc wrapper script\n"
    },
    {
      "commit": "905e1f85bacd68cc46c662f0672c561f30d2abbb",
      "tree": "a06ffb0c4f8159ee860409feb7819f09cd0c29d3",
      "parents": [
        "2d899901da2bcafd088df067c891ffab6f2d0087"
      ],
      "author": {
        "name": "OwenSanzas",
        "email": "zesheng@tamu.edu",
        "time": "Thu Mar 05 07:53:29 2026 +0000"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 09 11:56:10 2026 +0200"
      },
      "message": "oss-fuzz: Fix API misuse in the readapi fuzzer\n\nReplace the calls to `png_set_scale_16`, `png_set_packing` and\n`png_set_expand`, which were incorrectly combined with\n`png_read_png(..., PNG_TRANSFORM_IDENTITY, ...)`, with the equivalent\n`PNG_TRANSFORM_*` flags passed directly to `png_read_png`.\n\nThe libpng manual states that applications must use transforms, and not\ncall any `png_set_*` transform functions when they use `png_read_png`.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "2d899901da2bcafd088df067c891ffab6f2d0087",
      "tree": "598d429e0d9fbcfac1a68438574719e9b5ff3f3e",
      "parents": [
        "838b2e89ad5882597d24ce3c47c8d7461492cc97"
      ],
      "author": {
        "name": "OwenSanzas",
        "email": "zesheng@tamu.edu",
        "time": "Thu Mar 05 07:53:01 2026 +0000"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 09 11:32:06 2026 +0200"
      },
      "message": "oss-fuzz: Fix memory leaks and API misuse in the transformations fuzzer\n\n- Fix row buffer leak: the row buffer, allocated after `setjmp`, was\n  not freed when `png_read_row` triggered `longjmp`. Declare `row` as\n  volatile before `setjmp` and free it in the error handler. This fixes\n  a LeakSanitizer false positive that prevents the fuzzer from starting.\n- Fix palette buffer leak (same pattern as the row buffer leak):\n  declare `palette` as volatile before `setjmp` and free it in the\n  error handler.\n- Fix API misuse: replace `png_set_*` calls before `png_read_png` with\n  `PNG_TRANSFORM_*` flags.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "838b2e89ad5882597d24ce3c47c8d7461492cc97",
      "tree": "5c9d172bbe962105f0ae73cdccaa34d95df71065",
      "parents": [
        "7d52a808795e011a2dd6290c8b4369150f815f3c"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Mar 06 17:58:06 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Mar 06 18:20:52 2026 +0200"
      },
      "message": "build: Deprecate the POINTER_INDEXING config option\n\nPOINTER_INDEXING was a build configuration option that we maintained\nin order to work around a gcc 2.7.2.2 code generation bug (circa 1997).\nThis provided array-indexing fallback loops in `png_write_PLTE` and\n`png_write_sPLT`.\n\nUnfortunately, the fallback paths were effectively untested dead code\nin every default build, and have been a recurring source of latent bugs.\n(See commit 48800443eb in pnggroup/libpng#801 and commit f27592a0cd in\nlibpng 1.5.2rc02).\n\nNo compiler in current use requires this accommodation.\n\nThis is a cherry-pick of commit 28cb99fe65f09e79703ac2c3008649e14c7b0844\nfrom branch \u0027libpng18\u0027.\n"
    },
    {
      "commit": "7d52a808795e011a2dd6290c8b4369150f815f3c",
      "tree": "9d25d6d27548945f0047dfaa66890f1ae812acaf",
      "parents": [
        "b137d2180b1059dd9dbe3e7f14758e7f0e0505e2"
      ],
      "author": {
        "name": "ylwango613",
        "email": "1217816127@qq.com",
        "time": "Sat Feb 28 10:04:57 2026 +0800"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Mar 02 13:24:11 2026 +0200"
      },
      "message": "Validate shift bit depths in `png_set_shift` to prevent infinite loop\n\nThe function `png_set_shift` did not validate the `png_color_8` fields.\nWhen any channel\u0027s bit depth was 0, `png_do_shift` entered an infinite\nloop because the decrement `j -\u003d 0` never changed `j`. Values exceeding\nthe image bit depth also produced incorrect shift arithmetic.\n\nIn contrast, the read-side sBIT chunk parser (i.e., `png_handle_sBIT`\nin pngrutil.c) already rejects out-of-range values.\n\nThis commit adds equivalent per-channel validation on the write side,\nensuring that all relevant fields are in range from 1 to `bit_depth`,\nand reporting invalid values via `png_app_error`.\n\nFixes pnggroup/libpng#804\n\nThis is a cherry-pick of commit 203c843cd732f7062798dfadcaa48dd13d4854af\nfrom branch \u0027libpng18\u0027.\n\nCo-authored-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "b137d2180b1059dd9dbe3e7f14758e7f0e0505e2",
      "tree": "62b41d3ea02da1d55067a98ba74ff72a04e52f90",
      "parents": [
        "0e731d189ae6b2c8d2f74f2ea52c34bafc426c02"
      ],
      "author": {
        "name": "ylwango613",
        "email": "1217816127@qq.com",
        "time": "Thu Feb 26 17:34:27 2026 +0800"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Feb 27 20:27:52 2026 +0200"
      },
      "message": "Add missing NULL pointer checks in four public API functions\n\npng_set_eXIf_1, png_set_hIST, png_set_shift, and png_set_quantize\naccept user-provided pointers but do not validate them for NULL\nbefore dereferencing, unlike peer functions (png_set_iCCP,\npng_set_PLTE, png_set_sBIT, png_set_tRNS) which do check.\n\nPassing NULL causes an immediate SIGSEGV.\n\nFixes pnggroup/libpng#802\n\nThis is a cherry-pick of commit 747dd02240d95dc8da1b9fecf0f58569ebbcf5a7\nfrom branch \u0027libpng18\u0027.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "0e731d189ae6b2c8d2f74f2ea52c34bafc426c02",
      "tree": "dc9712cdc240cce3bf15ee7336f05121d9ab9038",
      "parents": [
        "646d55abaab7129aa223ae4a69485910e4727717"
      ],
      "author": {
        "name": "ylwango613",
        "email": "1217816127@qq.com",
        "time": "Thu Feb 26 15:49:46 2026 +0800"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Feb 27 18:59:20 2026 +0200"
      },
      "message": "Fix two copy-paste typos in colormap read and sPLT write\n\nFix wrong blue channel in `png_image_read_colormap`: `b \u003d back_g`\nshould be `b \u003d back_b` (pngread.c:2686). This caused PNG_RGB_INDEX\nto compute the wrong 6x6x6 cube index when the background has\ngreen !\u003d blue, forcing a lossier compositing path.\n\nFix dead loop in `png_write_sPLT`: `i \u003e spalette-\u003enentries` should\nbe `i \u003c spalette-\u003enentries` (pngwutil.c:1274). The loop body never\nexecuted, producing a malformed sPLT chunk with CRC mismatch. Only\naffects builds without PNG_POINTER_INDEXING_SUPPORTED.\n\nFixes pnggroup/libpng#800.\n\nThis is a cherry-pick of commit 48800443eb1a6cee79f37da45984e52b3085e62b\nfrom branch \u0027libpng18\u0027.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "646d55abaab7129aa223ae4a69485910e4727717",
      "tree": "4ddc639b1fc2a7ec323cc6b85308d6d402c39c2c",
      "parents": [
        "62f9a9069fc64e858fc32a7abcbb666802feabae"
      ],
      "author": {
        "name": "ylwango613",
        "email": "1217816127@qq.com",
        "time": "Tue Feb 24 16:41:26 2026 +0800"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Feb 27 17:09:08 2026 +0200"
      },
      "message": "Fix wrong channel indices in `png_image_read_and_map` RGB_ALPHA path\n\nIn the PNG_CMAP_RGB_ALPHA case for semi-transparent pixels (alpha\n64-195), all six bit checks used `inrow[0]` (red channel). The green\nand blue channels were never read, causing the colormap index to\ndepend solely on the red value. Fix by using `inrow[1]` for green and\n`inrow[2]` for blue, matching the fully-opaque branch at line 3041.\n\nBug introduced in commit 871b1d0 (libpng 1.6.1beta05, 2013-03-02).\nFixes pnggroup/libpng#796.\n\nThis is a cherry-pick of commit 961721b109dbc4e50ce7164e4dcde2bb49f4bb80\nfrom branch \u0027libpng18\u0027.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "62f9a9069fc64e858fc32a7abcbb666802feabae",
      "tree": "303f07d7027aaeb692512b30a31d6e873dec409d",
      "parents": [
        "8d245089d1585b1dfc24779045a6d1a4efca7ad7"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Wed Feb 11 14:51:23 2026 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Feb 13 20:17:41 2026 +0200"
      },
      "message": "oss-fuzz: Fix build.sh for/if\n\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "8d245089d1585b1dfc24779045a6d1a4efca7ad7",
      "tree": "bed5701833c5e4850daa5a5350719c524484f800",
      "parents": [
        "d54127e3db049282850e90c590d950f1fdbf62c2"
      ],
      "author": {
        "name": "THE-Spellchecker",
        "email": "The.Spellchecker@outlook.com",
        "time": "Sat Jan 10 20:07:32 2026 -0600"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Feb 13 18:48:22 2026 +0200"
      },
      "message": "Fix typographical errors\n\nThis is a cherry-pick of commit 0094fdbf3743c238effb88aa92cf2a2ea23ade4a\nfrom branch \u0027libpng18\u0027.\n\nCo-authored-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "d54127e3db049282850e90c590d950f1fdbf62c2",
      "tree": "835b8d2615139ff5d379a8e7dfaf9a1476f459ab",
      "parents": [
        "e0dbfd4b563331b5512424d80c909e201ac98115"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 07 11:53:04 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Feb 11 21:17:47 2026 +0200"
      },
      "message": "refactor: Clean up pointer variable declarations\n\nSplit compound declarations of pointer variables for improved clarity.\n\nRename local loop boundary variables, remove their sterile const\nqualifiers, and reorder their declarations to improve local cohesion.\n\nThis is a cherry-pick of commit 1ebf432e85b53bf111a4585b410592727dd40a5a\nfrom branch \u0027libpng18\u0027.\n"
    },
    {
      "commit": "e0dbfd4b563331b5512424d80c909e201ac98115",
      "tree": "2cb4419be5125658c4134c3fe3ced0598748f0ca",
      "parents": [
        "61b3a6fc08d3419c1857aa61bf1c1c57739935de"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Nov 03 17:44:30 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Feb 11 21:08:00 2026 +0200"
      },
      "message": "refactor: Clean up the redundant top-level const qualifiers\n\nRemove the top-level const qualifiers from local variables and from\nfunction parameters passed by value. These qualifiers only constrain\nthe local object within the function body: they neither affect function\nsignatures, nor constrain callers, nor protect any shared state.\n\nThroughout the libpng codebase we apply const only where it\nmeaningfully constrains objects beyond the immediate scope, such as\ntrue constants and pointed-to objects.\n\nThis is a cherry-pick of commit e973362b8bb15ad939b7f0eb264774bfc221d3be\nfrom branch \u0027libpng18\u0027.\n"
    },
    {
      "commit": "61b3a6fc08d3419c1857aa61bf1c1c57739935de",
      "tree": "5725facdf4e9e7d9dbd9104692f91db17e452ed0",
      "parents": [
        "c3e304954a9cfd154bc0dfbfea2b01cd61d6546d"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Feb 11 19:40:22 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Feb 11 19:40:22 2026 +0200"
      },
      "message": "Bump version to 1.6.56.git\n"
    },
    {
      "commit": "c3e304954a9cfd154bc0dfbfea2b01cd61d6546d",
      "tree": "e01f5780f93eaa6d74cca003bb39b427c8f1e910",
      "parents": [
        "b72e38c08b1bcd574c3a4a9190e5525e74604ed1"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Feb 09 22:02:20 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Feb 09 22:02:20 2026 +0200"
      },
      "message": "Release libpng version 1.6.55\n"
    },
    {
      "commit": "b72e38c08b1bcd574c3a4a9190e5525e74604ed1",
      "tree": "ae0205d0f1f54be67272611d8b6dd5e7cf4973e0",
      "parents": [
        "9404d8e35bdc060faa4d8a40792ba7a2527ff531"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Fri Jan 23 16:04:16 2026 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Feb 09 20:48:12 2026 +0200"
      },
      "message": "oss-fuzz: Restrict the nalloc build to libfuzzer\n\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "9404d8e35bdc060faa4d8a40792ba7a2527ff531",
      "tree": "8c935995180fe925fd6d5608495e1a817350b43e",
      "parents": [
        "2f7991c31bca4812580d7f9057537b987108c90c"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Feb 09 17:51:02 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Feb 09 17:51:02 2026 +0200"
      },
      "message": "chore: Pacify markdownlint\n"
    },
    {
      "commit": "2f7991c31bca4812580d7f9057537b987108c90c",
      "tree": "2e7288a97da866b51a12a5757608dba3eebf79a6",
      "parents": [
        "01d03b8453eb30ade759cd45c707e5a1c7277d88"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Feb 09 17:43:54 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Feb 09 17:43:54 2026 +0200"
      },
      "message": "Add .markdownlint.yml, a configuration file for markdownlint\n"
    },
    {
      "commit": "01d03b8453eb30ade759cd45c707e5a1c7277d88",
      "tree": "6b0bf5b28c847b9e1838ed0aaa461107424c3cfa",
      "parents": [
        "b884e8c6188ba2002230474451deccf61f09decc"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Feb 06 19:11:54 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Feb 06 19:11:54 2026 +0200"
      },
      "message": "Fix a heap buffer overflow in `png_set_quantize`\n\nThe color distance hash table stored the current palette indices, but\nthe color-pruning loop assumed the original indices. When colors were\neliminated and indices changed, the stored indices became stale. This\ncaused the loop bound `max_d` to grow past the 769-element hash array.\n\nThe fix consists in storing the original indices via `palette_to_index`\nto match the pruning loop\u0027s expectations.\n\nReported-by: Joshua Inscoe \u003cpwnalone@users.noreply.github.com\u003e\nCo-authored-by: Joshua Inscoe \u003cpwnalone@users.noreply.github.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "b884e8c6188ba2002230474451deccf61f09decc",
      "tree": "15b8b4db9428e19ba38ef4b6ae1d7ba5ef151b43",
      "parents": [
        "02f2b4f4699f0ef9111a6534f093b53732df4452"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Feb 06 19:03:06 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Feb 06 19:03:06 2026 +0200"
      },
      "message": "Bump version to 1.6.55.git\n"
    },
    {
      "commit": "02f2b4f4699f0ef9111a6534f093b53732df4452",
      "tree": "0ca45041086a3533b8d533355de5687af12ffaf0",
      "parents": [
        "f88784b357e7f54c0b8df398e2137cbd1c7909ce"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Jan 12 23:57:52 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Jan 12 23:57:52 2026 +0200"
      },
      "message": "Release libpng 1.6.54\n"
    },
    {
      "commit": "f88784b357e7f54c0b8df398e2137cbd1c7909ce",
      "tree": "c9a1edab618168218053e5316af0ad092bd32c99",
      "parents": [
        "25ec74f9282e0a5974036aa5b037358fedbd2590"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Jan 12 22:18:46 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Jan 12 22:18:46 2026 +0200"
      },
      "message": "chore(oss-fuzz): Fix the lint errors\n"
    },
    {
      "commit": "25ec74f9282e0a5974036aa5b037358fedbd2590",
      "tree": "352d27a4ac17f8972f12763e3758ff3fdf97b9a6",
      "parents": [
        "7a77762e6d952a90651cd404eb78ed65e7875746"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Sun Dec 07 22:31:47 2025 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Jan 12 11:41:09 2026 +0200"
      },
      "message": "oss-fuzz: Add three targets\n\nFrom https://github.com/pnggroup/libpng/issues/764\n\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "7a77762e6d952a90651cd404eb78ed65e7875746",
      "tree": "145e4e60d67a30a5c9268395d66eb49d195694be",
      "parents": [
        "296965f0e0b8ebd81da37e77f055b0f342393efd"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Sun Dec 07 22:22:30 2025 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Jan 12 11:41:09 2026 +0200"
      },
      "message": "oss-fuzz: Replace unicode space with ascii space\n\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "296965f0e0b8ebd81da37e77f055b0f342393efd",
      "tree": "e373936a366a7ae445f05f25ae33c99ee011f0a7",
      "parents": [
        "e086e68fa33e8fe9c4917a0c1fa7e990f084efd8"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Sun Dec 07 21:58:31 2025 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Jan 12 11:41:09 2026 +0200"
      },
      "message": "oss-fuzz: Disable nalloc with memory sanitizer\n\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "e086e68fa33e8fe9c4917a0c1fa7e990f084efd8",
      "tree": "09d48f3d4ce2281811cb204cf54098a2ab374a4b",
      "parents": [
        "cf155de014fc6c5cb199dd681dd5c8fb70429072"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Jan 10 19:55:49 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Jan 10 19:55:49 2026 +0200"
      },
      "message": "refactor: Improve naming clarity in `png_image_write*` and `png_write_*`\n\nFollowing up on commit e4f7ad4ea2a471776c81dda4846b7691925d9786:\n\nAfter we renamed variables and fields in pngread.c for better clarity,\nwe are doing the same in pngwrite.c. Apply the following name changes:\n\n- Rename the image write control struct field `row_bytes` to `row_step`\n  in order to clarify that this represents the signed stride between\n  rows (which may include padding or be negative for bottom-up layouts),\n  not the actual byte count of row data.\n\n- Standardize the local variable names to follow the new names in the\n  image write control struct: replace `row_bytes` with `row_step`.\n\nAlso following up on commit e4f7ad4ea2a471776c81dda4846b7691925d9786:\nfix a typo inside a comment in pngread.c.\n"
    },
    {
      "commit": "cf155de014fc6c5cb199dd681dd5c8fb70429072",
      "tree": "6a0eb099192ff8ea5b1b37950fa3ead0eb7024dc",
      "parents": [
        "ef14664904b1b192b6bbd3ff99d2f0ce65a8a5ea"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Jan 10 15:20:18 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Jan 10 15:20:18 2026 +0200"
      },
      "message": "fix: Remove incorrect truncation casts from `png_write_image_*`\n\nThe type of the row stride (`display-\u003erow_bytes`) is ptrdiff_t. Casting\nto png_uint_16 before division will truncate large strides, causing\nincorrect pointer arithmetic for images exceeding 65535 bytes per row.\nFor bottom-up images (negative stride), the truncation also corrupts\nthe sign, advancing the row pointer forward instead of backward.\n\nRemove the erroneous casts and let the compiler handle the pointer\narithmetic correctly. Also replace `sizeof (png_uint_16)` with 2.\n\nAdd regression test via `pngstest --stride-extra N` where N \u003e 32767\ntriggers the affected code paths.\n\nA NOTE ABOUT HISTORY:\nThe original code in libpng 1.5.6 (2011) had no such casts. They were\nintroduced in libpng 1.6.26 (2016), likely to silence compiler warnings\non 16-bit systems where the cast would be a no-op. On 32/64-bit systems\nthe cast truncates the strides above 65535 and corrupts the negative\nstrides.\n"
    },
    {
      "commit": "ef14664904b1b192b6bbd3ff99d2f0ce65a8a5ea",
      "tree": "5ed06f7acedc994efafc221ddc575dc99d8c1904",
      "parents": [
        "e4f7ad4ea2a471776c81dda4846b7691925d9786"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Jan 09 23:13:03 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Jan 09 23:13:03 2026 +0200"
      },
      "message": "refactor: Improve naming clarity in the `png_image_read_*` functions\n\nFollowing up on commit e4f7ad4ea2a471776c81dda4846b7691925d9786:\n\nThe original naming of variables and fields in pngread.c was rather\ninconsistent and confusing. Apply the following sequence of renames:\n\n- Rename the image read control struct field `row_bytes` to `row_step`\n  in order to clarify that this represents the signed stride between\n  rows (which may include padding or be negative for bottom-up layouts),\n  not the actual byte count of row data.\n\n- Standardize all local variable names: replace `step_row` and\n  `row_bytes` with `row_step` throughout. Remove unnecessary casts to\n  unsigned integer type in the direct read paths, preserving the signed\n  `ptrdiff_t` type for correct stride semantics.\n\n- Rename the local variable `copy_bytes` to `row_bytes` in order to\n  emphasize the semantic distinction between the row\u0027s byte count (used\n  for memcpy length) and the row step (used for pointer advancement).\n\nAlso add clarifying comments around the security-critical memcpy\noperation to document why row bytes and row step must be kept distinct.\n"
    },
    {
      "commit": "e4f7ad4ea2a471776c81dda4846b7691925d9786",
      "tree": "c73b25b75e2024554794efd51d1cad0a8f0084f1",
      "parents": [
        "9e4e247afbe809bac24bf70f531b23427e3f20ec"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Jan 09 20:51:53 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Jan 09 20:51:53 2026 +0200"
      },
      "message": "Fix a heap buffer over-read in `png_image_read_direct_scaled`\n\nFix a regression from commit 218612ddd6b17944e21eda56caf8b4bf7779d1ea.\n\nThe function `png_image_read_direct_scaled`, introduced by the fix for\nCVE-2025-65018, copies transformed row data from an intermediate buffer\n(`local_row`) to the user\u0027s output buffer. The copy incorrectly used\n`row_bytes` (the caller\u0027s stride) as the size parameter to memcpy, even\nthough `local_row` is only `png_get_rowbytes()` bytes long.\n\nThis causes a heap buffer over-read when:\n\n1. The caller provides a padded stride (e.g., for memory alignment):\n   memcpy reads past the end of `local_row` by `stride - row_width`\n   bytes.\n\n2. The caller provides a negative stride (for bottom-up layouts):\n   casting ptrdiff_t to size_t produces ~2^64, causing memcpy to\n   attempt reading exabytes, resulting in an immediate crash.\n\nThe fix consists in using the size of the row buffer for the copy and\nusing the stride for pointer advancement only.\n\nReported-by: Petr Simecek \u003csimecek@users.noreply.github.com\u003e\nAnalyzed-by: Stanislav Fort\nAnalyzed-by: Pavel Kohout\nCo-authored-by: Petr Simecek \u003csimecek@users.noreply.github.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "9e4e247afbe809bac24bf70f531b23427e3f20ec",
      "tree": "e550af2b139f2e4f184be952eeb01d65c81ead1a",
      "parents": [
        "54c127584fe1f9b4fbfb5893cdbfc8fb5570e6bc"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Jan 07 15:47:43 2026 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Jan 07 15:47:43 2026 +0200"
      },
      "message": "Update the copyright year\n"
    },
    {
      "commit": "54c127584fe1f9b4fbfb5893cdbfc8fb5570e6bc",
      "tree": "e2bad3338802d67835be4f30fdbe7c79365b5a90",
      "parents": [
        "0e894374dd7ee53039c6d84bd538dd7f16fc4cbe"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Oct 24 22:21:39 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Dec 08 17:57:47 2025 +0200"
      },
      "message": "chore: Tidy up whitespace in declarations and definitions\n\nThis is a cherry-pick of commit caa0c733f32661edf8ab82ad854c9fc9b14c8de1\nfrom branch \u0027libpng18\u0027.\n"
    },
    {
      "commit": "0e894374dd7ee53039c6d84bd538dd7f16fc4cbe",
      "tree": "f35ec80472e8e94dbd84e83eb0643900f88de75e",
      "parents": [
        "e8d40e1280f983d1898eff351b2fc7154705d8d1"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Oct 13 16:49:58 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Dec 08 17:57:47 2025 +0200"
      },
      "message": "fix: Use `png_voidp` instead of `voidp` in pngread.c and pngwrite.c\n\nA benign type error introduced in libpng-1.0.9beta1 (Nov 2000) went\nunnoticed in reviews and testing for nearly 25 years.\n\nThe type `voidp` (from zconf.h via zlib.h) is a plain \"void pointer\".\nBy contrast, `png_voidp` (from pngconf.h via png.h) was defined as a\n\"void FAR pointer\" on legacy i8086 memory models (MSDOS, OS/2 2.x,\nWin16), and as a plain \"void pointer\" elsewhere. The support for FAR\npointers in mixed-memory models was removed in libpng-1.6.0, which\ninadvertently \"fixed\" the underlying error. However, all libpng\nversions from 1.0.9 to 1.5.30 (Nov 2000–Sep 2017) remained broken on\nthese models; and yet, nobody noticed.\n\nThis typo illustrates how long we\u0027ve been carrying pointer abstraction\nbaggage without any confirmed benefit.\n\nThis is a cherry-pick of commit 0ff384943db3732fe6fe9e132b00eb3373072b41\nfrom branch \u0027libpng18\u0027.\n\nReviewed-by: Chris Blume \u003cProgramMax@gmail.com\u003e\nReviewed-by: Tobias Stoeckmann \u003ctobias@stoeckmann.org\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "e8d40e1280f983d1898eff351b2fc7154705d8d1",
      "tree": "207b9d5275f57c8dab88a8f1585120029f53bab4",
      "parents": [
        "4e3f57d50f552841550a36eabbb3fbcecacb7750"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Dec 08 15:36:40 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Dec 08 15:36:40 2025 +0200"
      },
      "message": "Bump version to 1.6.54.git\n"
    },
    {
      "commit": "4e3f57d50f552841550a36eabbb3fbcecacb7750",
      "tree": "d6fac87eacfc3ecb34a85fd2d7c3c296583463ad",
      "parents": [
        "ff615fdcaf393ec2402bfafebadaa30b32fe5f3a"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 23:46:38 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 23:46:38 2025 +0200"
      },
      "message": "Release libpng version 1.6.53\n"
    },
    {
      "commit": "ff615fdcaf393ec2402bfafebadaa30b32fe5f3a",
      "tree": "05ec43826ff48cff7788490c22995da9331ecb1b",
      "parents": [
        "c225b7d32be292dff6607a133c3d3d665bb8f0cb"
      ],
      "author": {
        "name": "Luis Caro Campos",
        "email": "3535649+jcar87@users.noreply.github.com",
        "time": "Fri Dec 05 16:28:45 2025 +0000"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 20:56:16 2025 +0200"
      },
      "message": "build: Remove leftover ASM language from CMake `project`\n\nReported-by: Andrew Tribick \u003cajtribick@googlemail.com\u003e\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "c225b7d32be292dff6607a133c3d3d665bb8f0cb",
      "tree": "61a72bb09950c6bb0e6917237f9bc2427db6d1e5",
      "parents": [
        "91bcccda7b20b199dc14056a0c77f68e117a4f90"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Wed Dec 03 21:58:16 2025 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 20:33:02 2025 +0200"
      },
      "message": "oss-fuzz: Use the nalloc fuzz target\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "91bcccda7b20b199dc14056a0c77f68e117a4f90",
      "tree": "f2a62d10dd509f5beb2bc9deb6f38c3c2e3301b6",
      "parents": [
        "57f0a71c6135b680b84229a34c145859161479d0"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 18:07:12 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 18:07:12 2025 +0200"
      },
      "message": "riscv: Delete unused helper functions and macros\n\nRemove dead code left over from earlier iterations:\n- `abs_diff`, `abs_sum`, `prefix_sum`: unused helper functions;\n- `MIN_CHUNK_LEN`, `MAX_CHUNK_LEN`: macros used by `prefix_sum`.\n"
    },
    {
      "commit": "57f0a71c6135b680b84229a34c145859161479d0",
      "tree": "4de6f43df9921296afe24b56c80664deb8d5542c",
      "parents": [
        "b1e36caccb1ada29af1e848718b449be410a5b0b"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 17:37:33 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 17:37:33 2025 +0200"
      },
      "message": "Update the list of contributing authors\n\nAlso reformat the attribution comment in riscv/filter_rvv_intrinsics.c\n"
    },
    {
      "commit": "b1e36caccb1ada29af1e848718b449be410a5b0b",
      "tree": "3f1d0ac0741139e6b30b4bdab6667637e7ac5cfb",
      "parents": [
        "2b3a667966465f00028f13017de510250a162103"
      ],
      "author": {
        "name": "Alexander Smorkalov",
        "email": "alexander.smorkalov@opencv.ai",
        "time": "Fri Dec 05 08:15:30 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 17:32:08 2025 +0200"
      },
      "message": "riscv: Fix the RVV build\n\nUse the correct RVV intrinsic, i.e.,\n`__riscv_vaaddu_vv_u8m1` instead of `__riscv_vaaddu_wx_u8m1`.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "2b3a667966465f00028f13017de510250a162103",
      "tree": "9dd92e14afe219a59d1aa97088b87505f24e40b0",
      "parents": [
        "d1ec15266204deb4102d2b5e40216bb7637261c8"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 11:49:50 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 11:49:50 2025 +0200"
      },
      "message": "Update the main AUTHORS file\n"
    },
    {
      "commit": "d1ec15266204deb4102d2b5e40216bb7637261c8",
      "tree": "c835307551b6fa9a5488745e96b93b60d23cf75e",
      "parents": [
        "d7447f087be18d790abc19c641c665494e224e4e"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 11:34:10 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 11:34:10 2025 +0200"
      },
      "message": "Refer to CVE-2025-66293 in a comment about a vulnerability fix\n\nFollowing up on commit a05a48b756de63e3234ea6b3b938b8f5f862484a.\n"
    },
    {
      "commit": "d7447f087be18d790abc19c641c665494e224e4e",
      "tree": "341e9306eda8e8194bc893b8db80cf2daebb3bfd",
      "parents": [
        "fbed16182b92eeb3a06d96e49f0836d450318098"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 11:32:17 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Dec 05 11:32:17 2025 +0200"
      },
      "message": "Bump version to 1.6.53.git\n"
    },
    {
      "commit": "fbed16182b92eeb3a06d96e49f0836d450318098",
      "tree": "ec164a949da4508da420fecfcd4d43fbe1f315cc",
      "parents": [
        "5c7d02d73b12aa96ff5bc27f3695d3fe3c6b1dd7"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Dec 03 21:48:14 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Dec 03 21:48:14 2025 +0200"
      },
      "message": "Release libpng version 1.6.52\n"
    },
    {
      "commit": "5c7d02d73b12aa96ff5bc27f3695d3fe3c6b1dd7",
      "tree": "f8174a5f306953213ccf47741559ffe18d34593a",
      "parents": [
        "5b159aed75e9d02d065026b8eeefcfc8b7c6b8e4"
      ],
      "author": {
        "name": "Philippe Antoine",
        "email": "contact@catenacyber.fr",
        "time": "Fri Nov 21 22:12:56 2025 +0100"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Dec 03 20:49:47 2025 +0200"
      },
      "message": "oss-fuzz: Add allocation failure fuzzing via nalloc\n\nIntegrate nalloc fuzzing to systematically test error handling paths\nwhen memory allocations fail. This technique previously found a memory\nleak in pCAL chunk handling and is already in production use via\nOSS-Fuzz on libwebp and libssh.\n\nThis is enabled via the `_nalloc` target suffix or the `NALLOC_FREQ`\nenvironment variable.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "5b159aed75e9d02d065026b8eeefcfc8b7c6b8e4",
      "tree": "1db136065f3c5552458dac600e8bd993962dfaeb",
      "parents": [
        "d27beddf9f4d80b8998791cbb91fe684820ff387"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Dec 03 20:31:19 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Dec 03 20:31:19 2025 +0200"
      },
      "message": "riscv: Reformat the contributor list and update the AUTHORS file\n"
    },
    {
      "commit": "d27beddf9f4d80b8998791cbb91fe684820ff387",
      "tree": "184bda058fab75d4846d7954d767445c4e76a79b",
      "parents": [
        "87ed1cd2b802ba8df133e6cbc91a5b4fdaf87cf6"
      ],
      "author": {
        "name": "liangjunzhao",
        "email": "junzhao.liang@spacemit.com",
        "time": "Tue Dec 02 09:46:07 2025 +0800"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Dec 03 20:31:19 2025 +0200"
      },
      "message": "riscv: Fix undefined behavior in `png_read_filter_row_paeth_rvv`\n\nThe existing implementation produced incorrect output at -O2/-O3 due\nto reliance on RVV mask-agnostic element preservation.\n\nThe old code computed absolute values using masked operations:\n\n    vbool8_t p_neg_mask \u003d __riscv_vmslt_vx_i16m2_b8(p, 0, vl);\n    vint16m2_t pa \u003d __riscv_vrsub_vx_i16m2_m(p_neg_mask, p, 0, vl);\n\nPer RVV 1.0 specification (section 5.4), the elements where the mask\nbit is 0 have agnostic tail policy: implementations may either preserve\nthe original value or may set all bits to 1. This is explicitly\nimplementation-defined and not guaranteed.\n\nWhen `p \u003e\u003d 0`, the mask bit is 0, so the \"preserved\" value of `pa` may\nbe clobbered to 0xFFFF depending on microarchitecture and optimization\nlevel. This causes silent data corruption in decoded PNG images.\n\nFix by eliminating all masked operations in favour of unconditional\nvector operations:\n\n1. Compute the absolute value via `min(x, -x)` in unsigned arithmetic:\n\n       vuint16m2_t tmp \u003d __riscv_vrsub_vx_u16m2(p, 0, vl);\n       vuint16m2_t pa \u003d __riscv_vminu_vv_u16m2(p, tmp, vl);\n\n   This works because operands are u8 values widened to u16.\n   For any difference `d \u003d b - c` where `b` and `c` are in `[0...255]`:\n   - If `b \u003e\u003d c`:\n     `d` is in [0...255], and `-d (mod 2^16)` is in `[65281...65535]`.\n   - If `b \u003c c`:\n     `d` is in `[65281...65535]`, and `-d (mod 2^16)` is in `[1...255]`.\n   In both cases, `min(d, -d)` yields `|b - c|`.\n\n2. Select the Paeth predictor via iterative min-tracking with vmerge:\n\n       vbool8_t m1 \u003d __riscv_vmsltu_vv_u16m2_b8(pb, pa, vl);\n       pa \u003d __riscv_vmerge_vvm_u16m2(pa, pb, m1, vl);\n       a \u003d __riscv_vmerge_vvm_u8m1(a, b, m1, vl);\n\n   The vmerge instruction explicitly defines all lanes (no agnostic\n   elements), and the strict less-than comparison preserves correct\n   tie-breaking per the PNG specification (prefer `a` over `b` over\n   `c` when equal).\n\nThe new implementation is also simpler (with fewer instructions) and\nprovides ~14% speedup over scalar on SpacemiT K1.\n\nReported-by: Filip Wasil \u003cf.wasil@samsung.com\u003e\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "87ed1cd2b802ba8df133e6cbc91a5b4fdaf87cf6",
      "tree": "6255e5044e127c616a2047046d2261e3876c3155",
      "parents": [
        "a05a48b756de63e3234ea6b3b938b8f5f862484a"
      ],
      "author": {
        "name": "liangjunzhao",
        "email": "junzhao.liang@spacemit.com",
        "time": "Mon Dec 01 15:29:26 2025 +0800"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Dec 03 20:31:19 2025 +0200"
      },
      "message": "riscv: Improve averaging performance in `png_read_filter_row_avg_rvv`\n\nReplace the two-instruction sequence (vwaddu and vnsrl) with a single\nvaaddu instruction for computing the average.\n\nThe vaaddu instruction with vxrm\u003d2 (round-toward-zero) produces\nidentical results to the widening add followed by narrowing shift,\nbut in a single operation.\n\nReviewed-by: Cosmin Truta \u003cctruta@gmail.com\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "a05a48b756de63e3234ea6b3b938b8f5f862484a",
      "tree": "d5fb8c3057818613d9a3bd42e215a2084214f884",
      "parents": [
        "788a624d7387a758ffd5c7ab010f1870dea753a1"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Dec 01 22:31:54 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Dec 01 22:31:54 2025 +0200"
      },
      "message": "Finalize the fix for out-of-bounds read in `png_image_read_composite`\n\nFollowing up on commit 788a624d7387a758ffd5c7ab010f1870dea753a1.\n\nThe previous commit added a defensive bounds check to address the\nsecurity issue (out-of-bounds read), but noted that the correctness\nissue remained: when the clamp triggered, the affected pixels were\nclamped to white instead of the correct composited color.\n\nThis commit addresses the correctness issue by fixing the flag\nsynchronization error identified in the previous commit\u0027s TODO:\n\n1. In `png_init_read_transformations`:\n   Clear PNG_FLAG_OPTIMIZE_ALPHA when clearing PNG_COMPOSE for palette\n   images. This correctly signals that the data is sRGB, not linear\n   premultiplied.\n\n2. In `png_image_read_composite`:\n   Check PNG_FLAG_OPTIMIZE_ALPHA and use the appropriate composition\n   formula. When set, use the existing linear composition. When cleared\n   (palette composition already done), use sRGB composition to match\n   what was done to the palette.\n\nRetain the previous clamp to the valid range as belt-and-suspenders\nprotection against any other unforeseen cases.\n"
    },
    {
      "commit": "788a624d7387a758ffd5c7ab010f1870dea753a1",
      "tree": "2b4f9dfa76e3e5a68b529e12bb7636b5da0b5efa",
      "parents": [
        "cf53e54ccf631d8de68a30ebb3b8eeed1d6f1a08"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Nov 29 00:39:16 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Nov 29 00:39:16 2025 +0200"
      },
      "message": "Fix an out-of-bounds read in `png_image_read_composite`\n\nAdd a defensive bounds check before calling PNG_sRGB_FROM_LINEAR to\nprevent reading up to 506 entries (1012 bytes) past `png_sRGB_base[]`.\n\nFor palette images with gamma, `png_init_read_transformations`\nclears PNG_COMPOSE after compositing on the palette, but it leaves\nPNG_FLAG_OPTIMIZE_ALPHA set. The simplified API then calls\n`png_image_read_composite` with sRGB data (not linear premultiplied),\ncausing the index to reach 1017. (The maximum valid index is 511.)\n\nNOTE:\nThis is a defensive fix that addresses the security issue (out-of-bounds\nread) but *NOT* the correctness issue (wrong output). When the clamp\ntriggers, the affected pixels are clamped to white instead of the\ncorrect composited color. Valid PNG images may render incorrectly with\nthe simplified API.\n\nTODO:\nWe already know the root cause is a flag synchronization error.\nFor palette images with gamma, `png_init_read_transformations`\nclears PNG_COMPOSE but leaves PNG_FLAG_OPTIMIZE_ALPHA set, causing\n`png_image_read_composite` to misinterpret sRGB data as linear\npremultiplied. However, we have yet to implement an architectural fix\nthat requires coordinating the simplified API with the transformation\npipeline.\n\nReported-by: flyfish101 \u003cflyfish101@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "cf53e54ccf631d8de68a30ebb3b8eeed1d6f1a08",
      "tree": "291a4bd0ae3263d74f617bdf8f79e3995e6dc359",
      "parents": [
        "49363adcfaf098748d7a4c8c624ad8c45a8c3a86"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 28 17:05:40 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 28 17:05:40 2025 +0200"
      },
      "message": "Bump version to 1.6.52.git\n"
    },
    {
      "commit": "49363adcfaf098748d7a4c8c624ad8c45a8c3a86",
      "tree": "b9771f2b9ea6ea5fde4677c06d5dc2bf41ba4980",
      "parents": [
        "869ed49945e48ca31e5add8e727fa07dd7b10dc8"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 23:01:00 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 23:01:00 2025 +0200"
      },
      "message": "Release libpng version 1.6.51\n"
    },
    {
      "commit": "869ed49945e48ca31e5add8e727fa07dd7b10dc8",
      "tree": "ffe4632c39a164dd82750e0e098004296cf86396",
      "parents": [
        "fe855702dec58a205580dc127e2c92d765e61262"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 21:52:02 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 21:52:02 2025 +0200"
      },
      "message": "Update the main AUTHORS file\n"
    },
    {
      "commit": "fe855702dec58a205580dc127e2c92d765e61262",
      "tree": "1ccf12946ff2ed2b073d6d80f2f648c478c32dee",
      "parents": [
        "b7fc38c91008c50b825bedfc693b1f594ca0e6f2"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 21:40:56 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 21:40:56 2025 +0200"
      },
      "message": "chore: Rerun `./autogen.sh --maintainer`\n"
    },
    {
      "commit": "b7fc38c91008c50b825bedfc693b1f594ca0e6f2",
      "tree": "6275de6a86f2bc6d8310f3fc72cc03b497ee93b2",
      "parents": [
        "c53a3237e3de2d0efb86cdc9de52fac18b143fa0"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 20:43:36 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 20:43:36 2025 +0200"
      },
      "message": "ci: Update the branch and tag exclusions on AppVeyor CI\n\nAs we plan to release libpng-1.8.0, with the \u0027libpng18\u0027 branch being\nthe new default, we are also discontinuing the \u0027master\u0027 branch as an\nalias branch. Update the exclusions in the AppVeyor CI configuration\nfile, replacing \u0027libpng00\u0027 to \u0027libpng18\u0027 with \u0027master\u0027.\n\nAlso update the regular expression that excludes release tags to\naccount for all \u0027vNN.NN.NN\u0027 tag names.\n"
    },
    {
      "commit": "c53a3237e3de2d0efb86cdc9de52fac18b143fa0",
      "tree": "3ceea2684f5f619f8068e3039d54858dd65ac146",
      "parents": [
        "728ac129b152654660fb22ce49d34ad2fc507bb2"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 19:12:40 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 19:12:40 2025 +0200"
      },
      "message": "chore: Disable automatic charset detection in .editorconfig-checker\n\nWork around a regression in editorconfig-checker version 3.5.0.\nIn this new version, editorconfig-checker fails to validate ASCII as\na valid subset of UTF-8.\n\nThis commit unblocks the GitHub linting action.\n"
    },
    {
      "commit": "728ac129b152654660fb22ce49d34ad2fc507bb2",
      "tree": "bdc440228c3cdf7e0178492caf3cc5958e9c7463",
      "parents": [
        "3a3d485a7564de4f1f348628864a774a4af16af8"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 19:03:57 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 19:03:57 2025 +0200"
      },
      "message": "chore: Update .gitignore to exclude more local files\n"
    },
    {
      "commit": "3a3d485a7564de4f1f348628864a774a4af16af8",
      "tree": "04396b609631c29b034917be176fafe8190f98db",
      "parents": [
        "218612ddd6b17944e21eda56caf8b4bf7779d1ea"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 17:57:36 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 21 17:57:36 2025 +0200"
      },
      "message": "riscv: Fix `-Wundef` compiler warnings and relax RVV version checks\n\nFix a regression from commit 816b008d8fcb9f741bcacdb29e72955914936856.\n\nWhen the build was not optimized for RVV (`PNG_RISCV_RVV_OPT \u003d\u003d 0`),\nthe macro PNG_RISCV_RVV_IMPLEMENTATION was left undefined, even though\nit is checked with `#if` instead of `#ifdef` in the source code.\nAdditionally, the RVV version checks included an upper bound check\n(`__riscv_v \u003c 1900000`) that disabled the RVV-optimized path for any\nfuture RVV 1.9+ version.\n\nWe added the missing fallback definition and we removed the v1.9+ upper\nbound. The RVV optimizations are now enabled for any RISC-V compiler\nthat supports RVV 1.0 or later, following the expectation that minor\nversion updates shall maintain compatibility.\n"
    },
    {
      "commit": "218612ddd6b17944e21eda56caf8b4bf7779d1ea",
      "tree": "098ab373eda98977a50ad02f59d95873e2654bb2",
      "parents": [
        "16b5e3823918840aae65c0a6da57c78a5a496a4d"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Nov 19 21:45:13 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Nov 19 21:45:13 2025 +0200"
      },
      "message": "Rearchitect the fix to the buffer overflow in `png_image_finish_read`\n\nUndo the fix from commit 16b5e3823918840aae65c0a6da57c78a5a496a4d.\nThat fix turned out to be unnecessarily limiting. It rejected all\n16-to-8 bit transformations, although the vulnerability only affects\ninterlaced PNGs where `png_combine_row` writes using IHDR bit-depth\nbefore the transformation completes.\n\nThe proper solution is to add an intermediate `local_row` buffer,\nspecifically for the slow but necessary step of 16-to-8 bit conversion\nof interlaced images. (The processing of non-interlaced images remains\nintact, using the fast path.) We added the flag `do_local_scale` and\nthe function `png_image_read_direct_scaled`, following the pattern that\ninvolves `do_local_compose`.\n\nIn conclusion:\n- The 16-to-8 bit transformations of interlaced images are now safe,\n  as they use an intermediate buffer.\n- The 16-to-8 bit transformations of non-interlaced images remain safe,\n  as the fast path remains unchanged.\n- All our regression tests are now passing.\n"
    },
    {
      "commit": "16b5e3823918840aae65c0a6da57c78a5a496a4d",
      "tree": "f7f83399de6dee8edbe2da22a12df42e2cd04f6f",
      "parents": [
        "08da33b4c88cfcd36e5a706558a8d7e0e4773643"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Nov 17 20:38:47 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Nov 17 20:38:47 2025 +0200"
      },
      "message": "Fix a buffer overflow in `png_image_finish_read`\n\nReject bit-depth mismatches between IHDR and the requested output\nformat. When a 16-bit PNG is processed with an 8-bit output format\nrequest, `png_combine_row` writes using the IHDR depth before\ntransformation, causing writes beyond the buffer allocated via\n`PNG_IMAGE_SIZE(image)`.\n\nThe validation establishes a safe API contract where\n`PNG_IMAGE_SIZE(image)` is guaranteed to be sufficient across the\ntransformation pipeline.\n\nExample overflow (32×32 pixels, 16-bit RGB to 8-bit RGBA):\n- Input format: 16 bits/channel × 3 channels \u003d 6144 bytes\n- Output buffer: 8 bits/channel × 4 channels \u003d 4096 bytes\n- Overflow: 6144 bytes - 4096 bytes \u003d 2048 bytes\n\nLarger images produce proportionally larger overflows. For example,\nfor 256×256 pixels, the overflow is 131072 bytes.\n\nReported-by: yosiimich \u003cyosiimich@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "08da33b4c88cfcd36e5a706558a8d7e0e4773643",
      "tree": "508ef38d660c902db286543719b2e3e221096b03",
      "parents": [
        "83b23a888b4395c3ae0af3f6d484fce3e4a81155"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Nov 12 13:46:23 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Nov 12 13:46:23 2025 +0200"
      },
      "message": "Fix a buffer overflow in `png_init_read_transformations`\n\nThe palette compositing code in `png_init_read_transformations` was\nincorrectly applying background compositing when PNG_FLAG_OPTIMIZE_ALPHA\nwas set. This violated the premultiplied alpha invariant\n`component \u003c\u003d alpha` expected by `png_image_read_composite`, causing\nvalues that exceeded the valid range for the PNG_sRGB_FROM_LINEAR lookup\ntables.\n\nWhen PNG_ALPHA_OPTIMIZED is active, palette entries should contain pure\npremultiplied RGB values without background compositing. The background\ncompositing must happen later in `png_image_read_composite` where the\nactual background color from the PNG file is available.\n\nThe fix consists in introducing conditional behavior based on\nPNG_FLAG_OPTIMIZE_ALPHA: when set, the code performs only\npremultiplication using the formula `component * alpha + 127) / 255`\nwith proper gamma correction. When not set, the original background\ncompositing calculation based on the `png_composite` macro is preserved.\n\nThis prevents buffer overflows in `png_image_read_composite` where\nout-of-range premultiplied values would cause out-of-bounds array access\nin `png_sRGB_base[]` and `png_sRGB_delta[]`.\n\nReported-by: Samsung-PENTEST \u003cSamsung-PENTEST@users.noreply.github.com\u003e\nAnalyzed-by: John Bowler \u003cjbowler@acm.org\u003e\n"
    },
    {
      "commit": "83b23a888b4395c3ae0af3f6d484fce3e4a81155",
      "tree": "377332b0c6ef5ba00d316cf8e90a78a86949868d",
      "parents": [
        "6a528eb5fd0dd7f6de1c39d30de0e41473431c37"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Nov 10 11:11:42 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Nov 10 11:11:42 2025 +0200"
      },
      "message": "refactor: Delete unreachable code from `png_do_read_transformations`\n\nAfter calling `png_do_quantize` from `png_do_read_transformations`,\n`rowbytes` (i.e. the length in bytes of a non-empty row) is always\nnon-zero. The subsequent call to `png_error` was therefore unreachable.\n"
    },
    {
      "commit": "6a528eb5fd0dd7f6de1c39d30de0e41473431c37",
      "tree": "8124b98bd3e9f9cee50ffe63641d0badecfd4f39",
      "parents": [
        "ea094764f3436e3c6524622724c2d342a3eff235"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Nov 08 23:58:26 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Nov 10 11:11:42 2025 +0200"
      },
      "message": "Fix a buffer overflow in `png_do_quantize`\n\nAllocate the quantize_index array to PNG_MAX_PALETTE_LENGTH (256 bytes)\ninstead of num_palette bytes. This approach matches the allocation\npattern for `palette[]`, `trans_alpha[]` and `riffled_palette[]` which\nwere similarly oversized in libpng 1.2.1 to prevent buffer overflows\nfrom malformed PNG files with out-of-range palette indices.\n\nOut-of-range palette indices `index \u003e\u003d num_palette` will now read\nidentity-mapped values from the `quantize_index` array (where index N\nmaps to palette entry N). This prevents undefined behavior while\navoiding runtime bounds checking overhead in the performance-critical\npixel processing loop.\n\nReported-by: Samsung-PENTEST \u003cSamsung-PENTEST@users.noreply.github.com\u003e\nAnalyzed-by: degrigis \u003cdegrigis@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "ea094764f3436e3c6524622724c2d342a3eff235",
      "tree": "624f547b9a8a51e0d63572c9cabc050b148e82c0",
      "parents": [
        "2bd84c019c300b78e811743fbcddb67c9d9bf821"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sat Nov 08 17:16:59 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Nov 10 11:11:42 2025 +0200"
      },
      "message": "Fix a memory leak in function `png_set_quantize`; refactor\n\nRelease the previously-allocated array `quantize_index` before\nreallocating it. This avoids leaking memory when the function\n`png_set_quantize` is called multiple times on the same `png_struct`.\n\nThis function assumed single-call usage, but fuzzing revealed that\nrepeated calls would overwrite the pointers without freeing the\noriginal allocations, leaking 256 bytes per call for `quantize_index`\nand additional memory for `quantize_sort` when histogram-based\nquantization is used.\n\nAlso remove the array `quantize_sort` from the list of `png_struct`\nmembers and make it a local variable. This array is initialized,\nused and released exclusively inside the function `png_set_quantize`.\n\nReported-by: Samsung-PENTEST \u003cSamsung-PENTEST@users.noreply.github.com\u003e\nAnalyzed-by: degrigis \u003cdegrigis@users.noreply.github.com\u003e\nReviewed-by: John Bowler \u003cjbowler@acm.org\u003e\n"
    },
    {
      "commit": "2bd84c019c300b78e811743fbcddb67c9d9bf821",
      "tree": "b2ec61121b3941d61a2959bebc7213da96bb1dfb",
      "parents": [
        "bd41aa64d34609a9f39944fd241c24f38bb7c3d6"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Fri Nov 07 22:40:05 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Sun Nov 09 18:39:33 2025 +0200"
      },
      "message": "Fix a heap buffer overflow in `png_write_image_8bit`\n\nThe condition guarding the pre-transform path incorrectly allowed 8-bit\ninput data to enter `png_write_image_8bit` which expects 16-bit input.\nThis caused out-of-bounds reads when processing 8-bit grayscale+alpha\nimages (GitHub #688), or 8-bit RGB or RGB+alpha images (GitHub #746),\nwith the `convert_to_8bit` flag set (an invalid combination that should\nbypass the pre-transform path).\n\nThe second part of the condition, i.e.\n\n    colormap \u003d\u003d 0 \u0026\u0026 convert_to_8bit !\u003d 0\n\nfailed to verify that input was 16-bit, i.e.\n\n    linear !\u003d 0\n\ncontradicting the comment \"This only applies when the input is 16-bit\".\n\nThe fix consists in restructuring the condition to ensure both the\n`alpha` path and the `convert_to_8bit` path require linear (16-bit)\ninput. The corrected condition, i.e.\n\n    linear !\u003d 0 \u0026\u0026 (alpha !\u003d 0 || display-\u003econvert_to_8bit !\u003d 0)\n\nmatches the expectation of the `png_write_image_8bit` function and\nprevents treating 8-bit buffers as 16-bit data.\n\nReported-by: Samsung-PENTEST \u003cSamsung-PENTEST@users.noreply.github.com\u003e\nReported-by: weijinjinnihao \u003cweijinjinnihao@users.noreply.github.com\u003e\nAnalyzed-by: degrigis \u003cdegrigis@users.noreply.github.com\u003e\nReviewed-by: John Bowler \u003cjbowler@acm.org\u003e\n"
    },
    {
      "commit": "bd41aa64d34609a9f39944fd241c24f38bb7c3d6",
      "tree": "8953efa2f50ec27c1450ec61efc2a045b613a6ea",
      "parents": [
        "c6913e22dfb791e02d333cd174e73c4d6c22b805"
      ],
      "author": {
        "name": "Tobias Stoeckmann",
        "email": "tobias@stoeckmann.org",
        "time": "Mon Sep 29 22:06:04 2025 +0200"
      },
      "committer": {
        "name": "Tobias Stoeckmann",
        "email": "tobias@stoeckmann.org",
        "time": "Mon Sep 29 22:10:27 2025 +0200"
      },
      "message": "api! Remove the experimental (and incomplete) ERROR_NUMBERS code\n\nThe purpose of this feature is to optionally prepend standardized\nnumbers to error and warning messages. The ERROR_NUMBERS feature was\nfirst drafted in libpng-1.2.0 and further developed in libpng-1.4.0;\nand yet, it was always disabled by default, and never completed.\n\nIn the light of a recent report concerning the security hazards arising\nfrom enabling this code in custom libpng builds, we think it\u0027s best to\nsimply remove all the code written to support this feature.\n\nBased on removal in libpng18, but keeping functions and options as\nno-ops for backwards compatibility.\n\nCo-authored-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "c6913e22dfb791e02d333cd174e73c4d6c22b805",
      "tree": "87b37bf6cde2b80ed1ddf9c2049543c9a6f0c429",
      "parents": [
        "99230a0368ccd1f31e974b9dd8cd8bcebaa30d00"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Sep 29 14:38:59 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Sep 29 14:38:59 2025 +0300"
      },
      "message": "chore: Update .gitignore to exclude local coding agent files\n\nThis is a cherry-pick of commit 8cfbbab55715674d7ea7f123707806f8b44228ab\nfrom branch \u0027libpng18\u0027.\n"
    },
    {
      "commit": "99230a0368ccd1f31e974b9dd8cd8bcebaa30d00",
      "tree": "cafcdae65488476cb4133e81dd8b8cbe64428d3a",
      "parents": [
        "27de46c5a418d0cd8b2bded5a4430ff48deb2920"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Sep 03 21:18:33 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Sep 03 21:18:33 2025 +0300"
      },
      "message": "refactor: Delete conditional compilation for libpng 1.6.0 or earlier\n\nThis is a cherry-pick of commit 5ff29c03bbe19992dcfe173a8db8528b4317ae4b\nfrom branch \u0027libpng18\u0027\n"
    },
    {
      "commit": "27de46c5a418d0cd8b2bded5a4430ff48deb2920",
      "tree": "a97a77f67aa67147e0f0e99a823bed4c460526de",
      "parents": [
        "e4e25f2e986456481c728e2327c9912b30bdcbfb"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Sep 01 16:50:02 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Sep 01 16:50:02 2025 +0300"
      },
      "message": "ci: Run autogen.sh without `--maintainer` in ci_verify_configure.sh\n\nThe autogen.sh script is not user-serviceable in the \u0027libpng16\u0027 branch,\nwhich implies the following:\n\n- It requires the `--maintainer` option.\n- It should not be run by the CI tooling.\n\nStarting from the branch \u0027libpng18\u0027 onwards, the autogen.sh script\nbecomes not only user-serviceable, but also mandatory, which implies:\n\n- It should be run by the CI tooling.\n- It does not require the `--maintainer` option.\n\nRemoving the option `--maintainer` from ci_verify_configure.sh should\nnot only simplify the verification script, but also catch errors that\nmight occur in the above-mentioned scenarios.\n\nThis is a cherry-pick of commit 2cd45a9728fa054ccf17e4cac5a9dd77f46251a0\nfrom branch \u0027libpng18\u0027.\n"
    },
    {
      "commit": "e4e25f2e986456481c728e2327c9912b30bdcbfb",
      "tree": "d37b5f945cc26a27139f54a35529574af0f409a8",
      "parents": [
        "134ab615b617f548e822d8857f1cfc0525aefeba"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Sep 01 16:44:51 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Sep 01 16:44:51 2025 +0300"
      },
      "message": "ci: Add GitHub Actions for verifying libpng on Linux, macOS and Windows\n\nThis is a cherry-pick of commit 03f83b88c16605d670dff6070956a47b116e0787\nfrom branch \u0027libpng18\u0027.\n"
    },
    {
      "commit": "134ab615b617f548e822d8857f1cfc0525aefeba",
      "tree": "d9f9dde6631425457f8efdbf386c676515944607",
      "parents": [
        "8fb19f2e2fe0ffa80c6f462eb1d8685f3d428604"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Thu Jul 17 23:00:16 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Thu Jul 17 23:06:50 2025 +0300"
      },
      "message": "chore: Update .gitignore\n\nThis is a cherry-pick of commit c14037646e4f61a7a6cc65c96cf9c3188af25022\nfrom branch \u0027develop\u0027.\n"
    },
    {
      "commit": "8fb19f2e2fe0ffa80c6f462eb1d8685f3d428604",
      "tree": "336cef0a247f5681cdff68becaa125475c2ba3de",
      "parents": [
        "816b008d8fcb9f741bcacdb29e72955914936856"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Mon Jul 14 22:05:50 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Tue Jul 15 19:54:49 2025 +0300"
      },
      "message": "doc: Update and reorganize the png.5 man page\n\nThis is a cherry-pick of commit 929ad805c5aa15321e8236897a8b0225607d3182\nfrom branch \u0027develop\u0027.\n\nCo-authored-by: Chris Lilley \u003cchris@w3.org\u003e\n"
    },
    {
      "commit": "816b008d8fcb9f741bcacdb29e72955914936856",
      "tree": "b4e730428298dbc2b79c6f87c9053410d38f6061",
      "parents": [
        "7916eb7ba08e97ac97c71784e15f78e3ffcd838c"
      ],
      "author": {
        "name": "Filip Wasil",
        "email": "f.wasil@samsung.com",
        "time": "Tue Jul 08 09:48:51 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Tue Jul 15 18:34:33 2025 +0300"
      },
      "message": "riscv: Leverage `__riscv_v` in pngpriv.h\n\nReviewed-by: John Bowler \u003cjbowler@acm.org\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "7916eb7ba08e97ac97c71784e15f78e3ffcd838c",
      "tree": "24e7b02b7e12cb397e00a042438a2b24f08e6f57",
      "parents": [
        "7cecdcae0715bbf7a4b643071e0d39f05d5e7f52"
      ],
      "author": {
        "name": "Filip Wasil",
        "email": "f.wasil@samsung.com",
        "time": "Mon Jul 07 11:08:35 2025 +0200"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Tue Jul 15 18:34:33 2025 +0300"
      },
      "message": "riscv: Support only RVV 1.0\n\nReviewed-by: John Bowler \u003cjbowler@acm.org\u003e\nSigned-off-by: Cosmin Truta \u003cctruta@gmail.com\u003e\n"
    },
    {
      "commit": "7cecdcae0715bbf7a4b643071e0d39f05d5e7f52",
      "tree": "e5268d3cf6351786e29e350cdcfe260ee3c6e002",
      "parents": [
        "cf59edd364b28de01fa6089a46e6ff8efe677074"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Thu Jul 03 22:42:11 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Thu Jul 03 22:42:11 2025 +0300"
      },
      "message": "Harden a vestigial check against overflow inside `png_zalloc`\n\nReported-by: Sergio Atienza Pastor, MTP Métodos y Tecnología\n"
    },
    {
      "commit": "cf59edd364b28de01fa6089a46e6ff8efe677074",
      "tree": "5fb841fc0f8f981583ecb8a7d4fddd95b86d1430",
      "parents": [
        "2b978915d82377df13fcbb1fb56660195ded868a"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Jul 02 20:24:24 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Wed Jul 02 20:24:24 2025 +0300"
      },
      "message": "Bump version to 1.6.51.git\n"
    },
    {
      "commit": "2b978915d82377df13fcbb1fb56660195ded868a",
      "tree": "58d40326652c2f414e8a6a4398f0a7c9fd54340d",
      "parents": [
        "254a64ec307a8151186aea58995dcb43c8e1ce95"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Tue Jul 01 23:50:00 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Tue Jul 01 23:50:00 2025 +0300"
      },
      "message": "Release libpng version 1.6.50\n"
    },
    {
      "commit": "254a64ec307a8151186aea58995dcb43c8e1ce95",
      "tree": "4f00b3a63fa4d934ce02a001ed7be306bb2a3097",
      "parents": [
        "9eb25bd8993a6f70704fedd78985250b20bb7594"
      ],
      "author": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Tue Jul 01 22:57:36 2025 +0300"
      },
      "committer": {
        "name": "Cosmin Truta",
        "email": "ctruta@gmail.com",
        "time": "Tue Jul 01 22:57:36 2025 +0300"
      },
      "message": "doc: Update the man pages to the final PNG-3 specification\n\nAlso make editorial changes regarding the previous PNG specifications.\n"
    }
  ],
  "next": "9eb25bd8993a6f70704fedd78985250b20bb7594"
}
