This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
utf8.h: Make sure macros not called with a ptr
authorKarl Williamson <khw@cpan.org>
Wed, 2 Oct 2019 22:37:17 +0000 (16:37 -0600)
committerKarl Williamson <khw@cpan.org>
Sun, 6 Oct 2019 16:18:17 +0000 (10:18 -0600)
By doing an '| 0' with a parameter in a macro expansion, a C syntax
error will be generated.  This is free protection.

utf8.h

diff --git a/utf8.h b/utf8.h
index 0769d81..104f18c 100644 (file)
--- a/utf8.h
+++ b/utf8.h
@@ -195,11 +195,11 @@ adding no time nor space requirements to the implementation.
 */
 
 #ifdef PERL_SMALL_MACRO_BUFFER
-#define NATIVE_TO_LATIN1(ch)     ((U8)(ch))
-#define LATIN1_TO_NATIVE(ch)     ((U8)(ch))
+#  define NATIVE_TO_LATIN1(ch)     ((U8)(ch))
+#  define LATIN1_TO_NATIVE(ch)     ((U8)(ch))
 #else
-#define NATIVE_TO_LATIN1(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
-#define LATIN1_TO_NATIVE(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
+#  define NATIVE_TO_LATIN1(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) ((ch) | 0)))
+#  define LATIN1_TO_NATIVE(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) ((ch) | 0)))
 #endif
 
 /* I8 is an intermediate version of UTF-8 used only in UTF-EBCDIC.  We thus
@@ -212,12 +212,12 @@ adding no time nor space requirements to the implementation.
 #define NATIVE_UTF8_TO_I8(ch) ((U8) (ch))
 #define I8_TO_NATIVE_UTF8(ch) ((U8) (ch))
 #else
-#define NATIVE_UTF8_TO_I8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
-#define I8_TO_NATIVE_UTF8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
+#define NATIVE_UTF8_TO_I8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) ((ch) | 0)))
+#define I8_TO_NATIVE_UTF8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) ((ch) | 0)))
 #endif
 
-#define UNI_TO_NATIVE(ch)        ((UV) (ch))
-#define NATIVE_TO_UNI(ch)        ((UV) (ch))
+#define UNI_TO_NATIVE(ch)        ((UV) ((ch) | 0))
+#define NATIVE_TO_UNI(ch)        ((UV) ((ch) | 0))
 
 /*