)]}'
{
  "commit": "d06523d84bb3152be44a07e8cf0ca7fe30c8bc8e",
  "tree": "71c39e08679c7dc5c530c6f31d7780401a99c0ab",
  "parents": [
    "e2704cba8119851a6b0d80ac94ace8d306efba45"
  ],
  "author": {
    "name": "Nico Weber",
    "email": "thakis@chromium.org",
    "time": "Thu Nov 30 01:54:56 2023 +0000"
  },
  "committer": {
    "name": "Pdfium LUCI CQ",
    "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Nov 30 01:54:56 2023 +0000"
  },
  "message": "Make WideString\u0027s FromUTF16BE / FromUTF16LE do surrogate fusing\n\n...and use them in PDF_DecodeText().\n\nNo behavior change for PDF_DecodeText().\n\nOtherwise, these functions are mostly used on Windows (where this\nis a no-op since wchar_t is 2 bytes there) and in fuzzers, so this\ngenerally shouldn\u0027t have a big effect.\n\nThis is a bit weird since WideString::ToUTF16LE() doesn\u0027t create\nsurrogates yet, so things don\u0027t round-trip cleanly through\nFromUTF16LE().ToUTF16LE(). But that\u0027s not a new problem since\nPDF_DecodeText() created fused surrogates before this as well,\nand FX_UTF8Decode() also creates WideStrings with characters outside\nthe BMP. (ToUTF16LE() adds a zero-terminator, which is also a problem\nround-trip wise.)\n\nIt\u0027s also strange that fx_string.h contains UTF8 conversion methods,\nin addition to WideString::FromUTF8(). They operate on WideStringViews.\nFX_UTF8Decode() should arguably be replaced by WideString::FromUTF8()\neverywhere, but FX_UTF8Encode() takes a WideStringView -- we probably\nwant to create FX_UTF16LEEncode() and make WideString::ToUTF16LE() call\nthat possibly. Or maybe FX_UTF8Encode() should become a method on\nByteString -- ByteString::UTF8FromWide() or something.\n\nBut that\u0027s all for other CLs. This here seems like a small\nself-contained progression.\n\nChange-Id: I13afb5f66df6f553358cc03ccfd56a78e8e624c3\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/114030\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nAuto-Submit: Nico Weber \u003cthakis@chromium.org\u003e\nCommit-Queue: Lei Zhang \u003cthestig@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6412a87ec1575e6e2bcc66327983245a20c08d4a",
      "old_mode": 33188,
      "old_path": "core/fpdfapi/parser/fpdf_parser_decode.cpp",
      "new_id": "29b2eb6bbbfca941d16166b8a86dfece2cc709f3",
      "new_mode": 33188,
      "new_path": "core/fpdfapi/parser/fpdf_parser_decode.cpp"
    },
    {
      "type": "modify",
      "old_id": "2ad7b5d20d7605c38ac303f3a72efb07cabe0087",
      "old_mode": 33188,
      "old_path": "core/fxcrt/widestring.cpp",
      "new_id": "dca0a48f6a65a9a52288925e7241a7475d46c665",
      "new_mode": 33188,
      "new_path": "core/fxcrt/widestring.cpp"
    },
    {
      "type": "modify",
      "old_id": "947926ce2987fcf69fe70f7f32c7bc22fed65a56",
      "old_mode": 33188,
      "old_path": "core/fxcrt/widestring_unittest.cpp",
      "new_id": "5c555ca1aca0c4e199a0fc5ff600c8a2a93fbd07",
      "new_mode": 33188,
      "new_path": "core/fxcrt/widestring_unittest.cpp"
    }
  ]
}
