)]}'
{
  "commit": "2c1ca6bb5be960529b2f2adac23a8aec46bc031c",
  "tree": "49077fbc5cc1ac771b30c20879c6b1a7f09bc2ae",
  "parents": [
    "d2d245942eccf108ac3c97b82a7dda59a509372c"
  ],
  "author": {
    "name": "Pablo Galindo Salgado",
    "email": "Pablogsal@gmail.com",
    "time": "Tue Feb 10 10:04:50 2026"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Feb 10 10:04:50 2026"
  },
  "message": "gh-144563: Fix remote debugging with duplicate libpython mappings from ctypes (#144595)\n\nWhen _ctypes is imported, it may call dlopen on the libpython shared\nlibrary, causing the dynamic linker to load a second mapping of the\nlibrary into the process address space. The remote debugging code\niterates memory regions from low addresses upward and returns the first\nmapping whose filename matches libpython. After _ctypes is imported, it\nfinds the dlopen\u0027d copy first, but that copy\u0027s PyRuntime section was\nnever initialized, so reading debug offsets from it fails.\n\nFix this by validating each candidate PyRuntime address before accepting\nit. The validation reads the first 8 bytes and checks for the \"xdebugpy\"\ncookie that is only present in an initialized PyRuntime. Uninitialized\nduplicate mappings will fail this check and be skipped, allowing the\nsearch to continue to the real, initialized PyRuntime.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fe1b5fbe00bbc4650dfb29d8190d4264f0441984",
      "old_mode": 33188,
      "old_path": "Lib/test/test_external_inspection.py",
      "new_id": "890aa584cd192ca5bcd2e110c2f18699b9846596",
      "new_mode": 33188,
      "new_path": "Lib/test/test_external_inspection.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "023f9dce20124f6da38ac777bfb26beeb8c6c50b",
      "new_mode": 33188,
      "new_path": "Misc/NEWS.d/next/Core_and_Builtins/2026-02-08-18-13-38.gh-issue-144563.hb3kpp.rst"
    },
    {
      "type": "modify",
      "old_id": "3fcc939fd0e876b8e764a6652b0047cb0c5b5bed",
      "old_mode": 33188,
      "old_path": "Modules/_remote_debugging/asyncio.c",
      "new_id": "fc059659511fd8d0c0668adcfe843b1841b7186a",
      "new_mode": 33188,
      "new_path": "Modules/_remote_debugging/asyncio.c"
    },
    {
      "type": "modify",
      "old_id": "dba6da3bad4197785d6a4dab10f16f806ce71088",
      "old_mode": 33188,
      "old_path": "Python/remote_debug.h",
      "new_id": "4ae1166e885485fec867d605beb06be632e67811",
      "new_mode": 33188,
      "new_path": "Python/remote_debug.h"
    }
  ]
}
