• Paul Eggert's avatar
    Make sure a 64-bit char is never passed to CHAR_STRING. · 13bdea59
    Paul Eggert authored
    Otherwise, CHAR_STRING would do the wrong thing on a 64-bit platform,
    by silently ignoring the top 32 bits, allowing some values
    that were far too large to be valid characters.
    * character.h: Include <verify.h>.
    (CHAR_STRING, CHAR_STRING_ADVANCE): Verify that the character
    arguments are no wider than unsigned, as a compile-time check
    to prevent future regressions in this area.
    * data.c (Faset):
    * editfns.c (Fchar_to_string, general_insert_function, Finsert_char):
    (Fsubst_char_in_region):
    * fns.c (concat):
    * xdisp.c (decode_mode_spec_coding):
    Adjust to CHAR_STRING's new requirement.
    * editfns.c (Finsert_char, Fsubst_char_in_region):
    * fns.c (concat): Check that character args are actually
    characters.  Without this test, these functions did the wrong
    thing with wildly out-of-range values on 64-bit hosts.
    13bdea59
ChangeLog 173 KB