]> granicus.if.org Git - php/commitdiff
Remove useless mbstring encoding 'CP50220-raw'
authorAlex Dowad <alexinbeijing@gmail.com>
Wed, 7 Oct 2020 20:54:39 +0000 (22:54 +0200)
committerAlex Dowad <alexinbeijing@gmail.com>
Fri, 15 Jan 2021 19:55:41 +0000 (21:55 +0200)
CP50220 is a variant of ISO-2022-JP invented by MicroSoft, which handles some
Unicode characters which are not representable in ISO-2022-JP by converting
them to similar characters which are representable.

What, then, is CP50220-raw? An Internet search turns up absolutely nothing.
Reference works which I consulted don't say anything about it. Other text
conversion libraries don't support it.

From looking at the code: It's just the same as CP50220, but it accepts
unmapped JIS X 0208 characters passed through from other Japanese encodings
and silently encodes them using the usual ISO-2022-JP escape sequence and
representation for JIS X 0208 characters.

It's hard to see how this could be useful. OK, let me come out and say it:
it's _not_ useful. We can confidently jettison this (mis)feature.

ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c
ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h
ext/mbstring/libmbfl/mbfl/mbfl_encoding.c
ext/mbstring/libmbfl/mbfl/mbfl_encoding.h

index 7b4b2630f4f09e5774c7e3b7045140bbcb445a73..d98366d1a6c6b922b8b025f6883e54445167f6c0 100644 (file)
@@ -41,6 +41,13 @@ static void mbfl_filt_conv_wchar_cp50220_dtor(mbfl_convert_filter *filt);
 static void mbfl_filt_conv_wchar_cp50220_copy(mbfl_convert_filter *src, mbfl_convert_filter *dest);
 static int mbfl_filt_conv_cp5022x_wchar_flush(mbfl_convert_filter *filter);
 
+/* Previously, a dubious 'encoding' called 'cp50220raw' was supported
+ * This was just CP50220, but the implementation was less strict regarding
+ * invalid characters; it would silently pass some through
+ * This 'encoding' only existed in mbstring. In case some poor, lost soul is
+ * still using it, retain minimal support by aliasing it to CP50220 */
+static const char *cp50220_aliases[] = {"cp50220raw", "cp50220-raw", NULL};
+
 const mbfl_encoding mbfl_encoding_jis_ms = {
        mbfl_no_encoding_jis_ms,
        "JIS-ms",
@@ -56,24 +63,13 @@ const mbfl_encoding mbfl_encoding_cp50220 = {
        mbfl_no_encoding_cp50220,
        "CP50220",
        "ISO-2022-JP",
-       NULL,
+       cp50220_aliases,
        NULL,
        MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
        &vtbl_cp50220_wchar,
        &vtbl_wchar_cp50220
 };
 
-const mbfl_encoding mbfl_encoding_cp50220raw = {
-       mbfl_no_encoding_cp50220raw,
-       "CP50220raw",
-       "ISO-2022-JP",
-       NULL,
-       NULL,
-       MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
-       &vtbl_cp50220raw_wchar,
-       &vtbl_wchar_cp50220raw
-};
-
 const mbfl_encoding mbfl_encoding_cp50221 = {
        mbfl_no_encoding_cp50221,
        "CP50221",
@@ -136,26 +132,6 @@ const struct mbfl_convert_vtbl vtbl_wchar_cp50220 = {
        mbfl_filt_conv_wchar_cp50220_copy
 };
 
-const struct mbfl_convert_vtbl vtbl_cp50220raw_wchar = {
-       mbfl_no_encoding_cp50220raw,
-       mbfl_no_encoding_wchar,
-       mbfl_filt_conv_common_ctor,
-       NULL,
-       mbfl_filt_conv_jis_ms_wchar,
-       mbfl_filt_conv_common_flush,
-       NULL,
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_cp50220raw = {
-       mbfl_no_encoding_wchar,
-       mbfl_no_encoding_cp50220raw,
-       mbfl_filt_conv_wchar_cp50220_ctor,
-       mbfl_filt_conv_wchar_cp50220_dtor,
-       mbfl_filt_conv_wchar_cp50220raw,
-       mbfl_filt_conv_any_jis_flush,
-       mbfl_filt_conv_wchar_cp50220_copy
-};
-
 const struct mbfl_convert_vtbl vtbl_cp50221_wchar = {
        mbfl_no_encoding_cp50221,
        mbfl_no_encoding_wchar,
@@ -571,29 +547,6 @@ mbfl_filt_conv_wchar_cp50220_dtor(mbfl_convert_filter *filt)
        }
 }
 
-/*
- * wchar => cp50220raw
- */
-int
-mbfl_filt_conv_wchar_cp50220raw(int c, mbfl_convert_filter *filter)
-{
-       if (c & MBFL_WCSPLANE_JIS0208) {
-               const int s = c & MBFL_WCSPLANE_MASK;
-
-               if ((filter->status & 0xff00) != 0x200) {
-                       CK((*filter->output_function)(0x1b, filter->data));             /* ESC */
-                       CK((*filter->output_function)(0x24, filter->data));             /* '$' */
-                       CK((*filter->output_function)(0x42, filter->data));             /* 'B' */
-                       filter->status = 0x200;
-               }
-               CK((*filter->output_function)((s >> 8) & 0x7f, filter->data));
-               CK((*filter->output_function)(s & 0x7f, filter->data));
-               return c;
-       } else {
-               return mbfl_filt_conv_wchar_cp50221(c, filter);
-       }
-}
-
 /*
  * wchar => CP50221
  */
index e97cd0fab8bc9a97f4b6074f806e6901d0aceffd..12ab19d4974a44e01675f2af3796643f94026a03 100644 (file)
@@ -34,7 +34,6 @@
 
 extern const mbfl_encoding mbfl_encoding_jis_ms;
 extern const mbfl_encoding mbfl_encoding_cp50220;
-extern const mbfl_encoding mbfl_encoding_cp50220raw;
 extern const mbfl_encoding mbfl_encoding_cp50221;
 extern const mbfl_encoding mbfl_encoding_cp50222;
 
@@ -42,8 +41,6 @@ extern const struct mbfl_convert_vtbl vtbl_jis_ms_wchar;
 extern const struct mbfl_convert_vtbl vtbl_wchar_jis_ms;
 extern const struct mbfl_convert_vtbl vtbl_cp50220_wchar;
 extern const struct mbfl_convert_vtbl vtbl_wchar_cp50220;
-extern const struct mbfl_convert_vtbl vtbl_cp50220raw_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_cp50220raw;
 extern const struct mbfl_convert_vtbl vtbl_cp50221_wchar;
 extern const struct mbfl_convert_vtbl vtbl_wchar_cp50221;
 extern const struct mbfl_convert_vtbl vtbl_cp50222_wchar;
@@ -52,7 +49,6 @@ extern const struct mbfl_convert_vtbl vtbl_wchar_cp50222;
 int mbfl_filt_conv_jis_ms_wchar(int c, mbfl_convert_filter *filter);
 int mbfl_filt_conv_wchar_jis_ms(int c, mbfl_convert_filter *filter);
 int mbfl_filt_conv_wchar_cp50220(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_cp50220raw(int c, mbfl_convert_filter *filter);
 int mbfl_filt_conv_wchar_cp50221(int c, mbfl_convert_filter *filter);
 int mbfl_filt_conv_wchar_cp50222(int c, mbfl_convert_filter *filter);
 int mbfl_filt_conv_wchar_cp50222_flush(mbfl_convert_filter *filter);
index e558fba4b91b85886f863454578d352054c0fd4c..12239b96ea6150534f482e277bc8fa6518903e0c 100644 (file)
@@ -165,7 +165,6 @@ static const mbfl_encoding *mbfl_encoding_ptr_list[] = {
        &mbfl_encoding_2022jp_2004,
        &mbfl_encoding_2022jp_kddi,
        &mbfl_encoding_cp50220,
-       &mbfl_encoding_cp50220raw,
        &mbfl_encoding_cp50221,
        &mbfl_encoding_cp50222,
        NULL
index 40eb6e9bb97356ebb40df26f956a1447c29d212a..9f926d035ce4e6784c3a2c3a323c502d9b906412 100644 (file)
@@ -115,7 +115,6 @@ enum mbfl_no_encoding {
        mbfl_no_encoding_cp850,
        mbfl_no_encoding_jis_ms,
        mbfl_no_encoding_cp50220,
-       mbfl_no_encoding_cp50220raw,
        mbfl_no_encoding_cp50221,
        mbfl_no_encoding_cp50222,
        mbfl_no_encoding_charset_max