Skip to content
Snippets Groups Projects
  1. Mar 23, 2021
    • Simon McVittie's avatar
      inspect-library: Don't print non-ASCII as nonsense codepoints · 869b7c0d
      Simon McVittie authored
      If we pass a (signed) char to a varargs function, it's promoted to
      (signed) int by the default argument promotions (resulting in padding
      on the left by copying the sign bit); but then %x interprets it as an
      unsigned int. The practical result is that for anything over 0x7f, for
      example 0xAB, we interpret the high bit as the sign bit and pad with
      "1" bits, turning 0xAB into 0xFFFFFFAB. \uFFFFFFAB is not allowed as an
      escaped JSON character (because Unicode stops at U+10FFFF) so parsing
      fails.
      
      Note that this change does not result in strings with non-ASCII content
      being interpreted *correctly*: we are effectively taking the bytestring
      from the OS and decoding it as though it was ISO-8859-1, so if a file's
      path includes U+00C7 LATIN CAPITAL_LETTER C WITH CEDILLA (`Ç`), encoded
      as 0xC3 0x87 on disk (assuming a UTF-8 environment), it will go into
      the JSON document as \u00C3\u0087 instead of the correct \u00C7. Fixing
      this would require either a considerably more complex implementation of
      inspect-library, or an output format that is based on bytestrings
      rather than JSON.
      
      Partially addresses
      https://github.com/ValveSoftware/steam-runtime/issues/385 and
      #69
      
      .
      
      Signed-off-by: default avatarSimon McVittie <smcv@collabora.com>
      869b7c0d
  2. Mar 17, 2021
  3. Mar 16, 2021
  4. Mar 12, 2021
  5. Mar 11, 2021
  6. Mar 05, 2021
  7. Mar 04, 2021
Loading