)]}'
{
  "commit": "578411982c16f753f4893532510099ef665117da",
  "tree": "6f31b5f0e818cd353c4f35bc4238d42009290a9f",
  "parents": [
    "2f6b3800e6004b97e04082c9fa06192ae37aea52"
  ],
  "author": {
    "name": "Petr Viktorin",
    "email": "encukou@gmail.com",
    "time": "Fri May 08 12:16:06 2026"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri May 08 12:16:06 2026"
  },
  "message": "gh-149486: tarfile.data_filter: validate written link target (GH-149487)\n\nThe data filter rewrote linknames with normpath() but ran the\ncontainment check against the un-normalised value, and computed a\nsymlink\u0027s directory before stripping trailing slashes.  Both let a\ncrafted archive create links pointing outside the destination.  Also\nreject link members that resolve to the destination directory itself,\nwhich could otherwise replace it with a symlink and redirect all\nsubsequent members.\n\n(Patch by Greg; Petr\u0027s just reviewing \u0026 merging.)\n\nCo-authored-by: Gregory P. Smith \u003cgreg@krypto.org\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d0e7dec5575047a6ccc5dfbfe56c59ca73c37a30",
      "old_mode": 33188,
      "old_path": "Lib/tarfile.py",
      "new_id": "1394a26f2096ff69b12622566e8d46d9dd3bf6b3",
      "new_mode": 33188,
      "new_path": "Lib/tarfile.py"
    },
    {
      "type": "modify",
      "old_id": "e270cbb22e2d1a93c20a0606ce408eab2c637e81",
      "old_mode": 33188,
      "old_path": "Lib/test/test_tarfile.py",
      "new_id": "192c948edc605670f814447c42266c6ca72450f4",
      "new_mode": 33188,
      "new_path": "Lib/test/test_tarfile.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7c69edb683cf80aac52cee849148768d69d4ebc9",
      "new_mode": 33188,
      "new_path": "Misc/NEWS.d/next/Security/2026-05-03-21-00-00.gh-issue-149486.tarflt.rst"
    }
  ]
}
