)]}'
{
  "commit": "c25b1683443c6d658a82dc1c5587fdb0ae81663c",
  "tree": "e3d39baf7ced7022ba54e65943c970d63721443f",
  "parents": [
    "b87ac96651054fa89baab4e3a88a7feee7f92314"
  ],
  "author": {
    "name": "Eric Blake",
    "email": "eblake@redhat.com",
    "time": "Mon May 22 14:04:40 2023 -0500"
  },
  "committer": {
    "name": "Eric Blake",
    "email": "eblake@redhat.com",
    "time": "Fri Jun 02 12:29:27 2023 -0500"
  },
  "message": "cutils: Improve qemu_strtod* error paths\n\nPrevious patches changed all integral qemu_strto*() error paths to\nguarantee that *value is never left uninitialized.  Do likewise for\nqemu_strtod.  Also, tighten qemu_strtod_finite() to never return a\nnon-finite value (prior to this patch, we were rejecting \"inf\" with\n-EINVAL and unspecified result 0.0, but failing \"9e999\" with -ERANGE\nand HUGE_VAL - which is infinite on IEEE machines - despite our\nfunction claiming to recognize only finite values).\n\nAuditing callers, we have no external callers of qemu_strtod, and\namong the callers of qemu_strtod_finite:\n\n- qapi/qobject-input-visitor.c:qobject_input_type_number_keyval() and\n  qapi/string-input-visitor.c:parse_type_number() which reject all\n  errors (does not matter what we store)\n\n- utils/cutils.c:do_strtosz() incorrectly assumes that *endptr points\n  to \u0027.\u0027 on all failures (that is, it is not distinguishing between\n  EINVAL and ERANGE; and therefore still does the WRONG THING for\n  \"9.9e999\".  The change here does not entirely fix that (a later\n  patch will tackle this more systematically), but at least it fixes\n  the read-out-of-bounds first diagnosed in\n  https://gitlab.com/qemu-project/qemu/-/issues/1629\n\n- our testsuite, which we can update to match what we document\n\nSigned-off-by: Eric Blake \u003ceblake@redhat.com\u003e\nReviewed-by: Hanna Czenczek \u003chreitz@redhat.com\u003e\nCC: qemu-stable@nongnu.org\nMessage-Id: \u003c20230522190441.64278-19-eblake@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0e3215a46e7799835a5280dfeb2a84ab52f5a19b",
      "old_mode": 33188,
      "old_path": "tests/unit/test-cutils.c",
      "new_id": "1ee410fae45b730107b5291b617c4825925ab40b",
      "new_mode": 33188,
      "new_path": "tests/unit/test-cutils.c"
    },
    {
      "type": "modify",
      "old_id": "e3a49209a94ffd8fe0fabad31b54c2ba70f16591",
      "old_mode": 33188,
      "old_path": "util/cutils.c",
      "new_id": "bde2da59bddfbb36ee21a99537d0e01248705c84",
      "new_mode": 33188,
      "new_path": "util/cutils.c"
    }
  ]
}
