com php-src: Fix cp950 pua check: ext/mbstring/libmbfl/filters/ mbfilter_big5.c
| From: | Nikita Popov | Date: | Wed, 22 Nov 2017 22:47:18 +0000 |
| Subject: | com php-src: Fix cp950 pua check: ext/mbstring/libmbfl/filters/ mbfilter_big5.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-100353@lists.php.net to get a copy of this message | ||
Commit: d21c902841676070d57fec8e158d9b1d9de30793
Author: Nikita Popov <nikita.ppv@gmail.com> Wed, 22 Nov 2017 23:47:18 +0100
Parents: 1dfcd1af9aab9b760d971ceeac18e9e83c85f80f
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d21c902841676070d57fec8e158d9b1d9de30793
Log:
Fix cp950 pua check
One set of parenthesis was missing, causing a legitimate compiler
warnings. In the end it doesn't actually matter, because it just
ends up doing an unnecessary check in the w > 0 case.
This fixes the logic and moves it out into a separate functions,
to be a bit more readable.
Changed paths:
M ext/mbstring/libmbfl/filters/mbfilter_big5.c
Diff:
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.c
b/ext/mbstring/libmbfl/filters/mbfilter_big5.c
index 21aac8e..6b845f2 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_big5.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_big5.c
@@ -142,6 +142,17 @@ static unsigned short cp950_pua_tbl[][4] = {
{0xf70f,0xf848,0xc740,0xc8fe},
};
+static inline int is_in_cp950_pua(int c1, int c) {
+ if ((c1 >= 0xfa && c1 <= 0xfe) || (c1 >= 0x8e && c1 <= 0xa0) ||
+ (c1 >= 0x81 && c1 <= 0x8d) || (c1 >= 0xc7 && c1 <= 0xc8)) {
+ return (c > 0x39 && c < 0x7f) || (c > 0xa0 && c < 0xff);
+ }
+ if (c1 == 0xc6) {
+ return c > 0xa0 && c < 0xff;
+ }
+ return 0;
+}
+
/*
* Big5 => wchar
*/
@@ -190,11 +201,7 @@ mbfl_filt_conv_big5_wchar(int c, mbfl_convert_filter *filter)
if (filter->from->no_encoding == mbfl_no_encoding_cp950) {
/* PUA for CP950 */
- if (w <= 0 &&
- (((c1 >= 0xfa && c1 <= 0xfe) || (c1 >= 0x8e && c1 <= 0xa0) ||
- (c1 >= 0x81 && c1 <= 0x8d) ||(c1 >= 0xc7 && c1 <= 0xc8))
- && ((c > 0x39 && c < 0x7f) || (c > 0xa0 && c < 0xff))) ||
- ((c1 == 0xc6) && (c > 0xa0 && c < 0xff))) {
+ if (w <= 0 && is_in_cp950_pua(c1, c)) {
c2 = c1 << 8 | c;
for (k = 0; k < sizeof(cp950_pua_tbl)/(sizeof(unsigned short)*4); k++) {
if (c2 >= cp950_pua_tbl[k][2] && c2 <= cp950_pua_tbl[k][3]) {