)]}'
{
  "commit": "053fbe0f7541bb26fdd34fb250f9f92e46462500",
  "tree": "474aaedb9e000cf9d6e3de4665df5ab744613032",
  "parents": [
    "7ac334e28ae5d174bec5d5c7f1fd2679f5fe0fb9"
  ],
  "author": {
    "name": "Pali Rohár",
    "email": "pali.rohar@gmail.com",
    "time": "Fri Dec 26 00:33:44 2025 +0100"
  },
  "committer": {
    "name": "LIU Hao",
    "email": "lh_mouse@126.com",
    "time": "Tue Feb 03 13:35:43 2026 +0800"
  },
  "message": "crt: crt_handler: Propagate SEH EXCEPTION_INT_OVERFLOW exception also in 64-bit binaries\n\nDivision INT_MIN/-1 is undefined behavior in C and on x86 idivl instruction\ngenerates Divide Exception. Windows in this case raises SEH exception\nEXCEPTION_INT_OVERFLOW.\n\nFor 32-bit binaries this EXCEPTION_INT_OVERFLOW is not handled by\n_gnu_exception_handler() and __mingw_SEH_error_handler() at all.\nCase for this exception is hidden inside #ifdef _WIN64. So exception\npropagates back to Windows which shows Dr. Watson dialog (if is not\ndisabled) and kill the process.\n\nFor 64-bit binaries this exception in those two functions is handled,\nsilently ignored and then instructed Windows to restart that fault\ninstruction. So this logic cause an infinite loop in application without\nshowing any error and without propagating error back to Windows.\n\nOn Linux, this x86 Divide Exception for both 32-bit and 64-bit is\ntranslated to SIGFPE signal for which C application can register handler.\n\nFix the problem of x86-64 infinite loop by handling the\nEXCEPTION_INT_OVERFLOW via SIGFPE signal if is registered by application.\nIf is not registered then propagate exception back to Windows which could\nlaunch Dr. Watson or kill the process.\n\nThis changes also behavior for 32-bit builds as it allows to use SIGFPE too.\n\nBug: https://stackoverflow.com/questions/25363379/different-results-for-idiv-instruction\nCo-authored-by: LIU Hao \u003clh_mouse@126.com\u003e\nSigned-off-by: LIU Hao \u003clh_mouse@126.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e0e77646a6963ce6533ca2a1a296ef1c9c829ed4",
      "old_mode": 33188,
      "old_path": "mingw-w64-crt/crt/crt_handler.c",
      "new_id": "4c344d36d38c26a17d135be60dbece59a886da39",
      "new_mode": 33188,
      "new_path": "mingw-w64-crt/crt/crt_handler.c"
    },
    {
      "type": "modify",
      "old_id": "45a61d6dca873a4654837a306116b76b260b4fcc",
      "old_mode": 33188,
      "old_path": "mingw-w64-crt/testcases/Makefile.am",
      "new_id": "5fceb0eacaf892761fc991f46d5da05b4850d6cf",
      "new_mode": 33188,
      "new_path": "mingw-w64-crt/testcases/Makefile.am"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "61e0e2296712a5449b727fcc2d6865f5fc7065ee",
      "new_mode": 33188,
      "new_path": "mingw-w64-crt/testcases/t_sigfpe.c"
    }
  ]
}
