From ae005663afa8878139a438594b19b16615e4f5df Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Tue, 1 Mar 2022 11:53:38 -0700 Subject: Fix UTF8_IS_REPLACEMENT() and add tests This macro relied on a now-removed other macro in 2019, 216dc346ceeeb9b6ba0fdd470ccfe4f8b2a286c4. Fix it and add tests. This bug was caught by Devel::PPPort --- utf8.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'utf8.h') diff --git a/utf8.h b/utf8.h index 1d172cd626..bd2526ba5d 100644 --- a/utf8.h +++ b/utf8.h @@ -917,7 +917,10 @@ representation. */ #define UNICODE_REPLACEMENT 0xFFFD #define UNICODE_IS_REPLACEMENT(uv) UNLIKELY((UV) (uv) == UNICODE_REPLACEMENT) -#define UTF8_IS_REPLACEMENT(s, send) is_REPLACEMENT_utf8_safe(s,send) +#define UTF8_IS_REPLACEMENT(s, send) \ + UNLIKELY( ((send) - (s)) >= (sizeof(REPLACEMENT_CHARACTER_UTF8) - 1) \ + && memEQ((s), REPLACEMENT_CHARACTER_UTF8, \ + sizeof(REPLACEMENT_CHARACTER_UTF8) - 1)) /* Max legal code point according to Unicode */ #define PERL_UNICODE_MAX 0x10FFFF -- cgit v1.2.1