summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHironobu Yamashita <h.y.acetaminophen@gmail.com>2021-06-29 12:08:43 +0000
committerHironobu Yamashita <h.y.acetaminophen@gmail.com>2021-06-29 12:08:43 +0000
commit6cee5b73a7fb36a8a1abcdbd0d1be611d2be35f2 (patch)
treee5c2ee2f632c424ffbcbbb41bd3ebee322d27441
parent2edd8ec8e8169698e4dfb44b0f91c1bd3212f25c (diff)
ptexenc: always return 0 for invalid code conversion
git-svn-id: svn://tug.org/texlive/trunk@59749 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Build/source/texk/ptexenc/ChangeLog6
-rw-r--r--Build/source/texk/ptexenc/jisx0208.h104
-rw-r--r--Build/source/texk/ptexenc/kanjicnv.c38
-rw-r--r--Build/source/texk/ptexenc/ptexenc/kanjicnv.h3
4 files changed, 36 insertions, 115 deletions
diff --git a/Build/source/texk/ptexenc/ChangeLog b/Build/source/texk/ptexenc/ChangeLog
index cfc0620c330..5366043d538 100644
--- a/Build/source/texk/ptexenc/ChangeLog
+++ b/Build/source/texk/ptexenc/ChangeLog
@@ -1,3 +1,9 @@
+2021-06-29 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * kanjicnv.c, ptexenc/kanjicnv.h: Always return 0 for
+ invalid code conversions between JIS/EUC/SJIS/KUTEN/UCS.
+ * jisx0208.h: Remove unused entry of UnicodeTbl.
+
2021-06-25 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
* unicode-jp.c: changed the returned value of UCS2toJISnative(0)
diff --git a/Build/source/texk/ptexenc/jisx0208.h b/Build/source/texk/ptexenc/jisx0208.h
index c0a5ffa43fb..8992c2e9fc7 100644
--- a/Build/source/texk/ptexenc/jisx0208.h
+++ b/Build/source/texk/ptexenc/jisx0208.h
@@ -1102,110 +1102,6 @@ static unsigned short UnicodeTbl[][94] = {
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
- { /* category 85 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
- { /* category 86 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
- { /* category 87 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
- { /* category 88 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
- { /* category 89 */
- 0x7E8A, 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631,
- 0x68C8, 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00,
- 0x4F03, 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD,
- 0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042, 0x5094,
- 0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215,
- 0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372,
- 0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF,
- 0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10,
- 0x589E, 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4,
- 0x59BA, 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6,
- 0x5CBA, 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8,
- 0x5DB9, 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7},
- { /* category 90 */
- 0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120, 0x60F2,
- 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460,
- 0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, 0x663B, 0x6609, 0x662E,
- 0x661E, 0x6624, 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673, 0x6699,
- 0x66A0, 0x66B2, 0x66BF, 0x66FA, 0x670E, 0xF929, 0x6766, 0x67BB,
- 0x6852, 0x67C0, 0x6801, 0x6844, 0x68CF, 0xFA13, 0x6968, 0xFA14,
- 0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46, 0x6A73, 0x6A7E, 0x6AE2,
- 0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F, 0x6CDA, 0x6D04,
- 0x6D87, 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC,
- 0x6E39, 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5,
- 0x7005, 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C,
- 0x7146, 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1},
- { /* category 91 */
- 0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9, 0x73D6, 0x73E3,
- 0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429, 0x742E, 0x7462,
- 0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C, 0x769E, 0x769B,
- 0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864, 0x787A,
- 0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1,
- 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7,
- 0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362,
- 0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559, 0x856B,
- 0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5, 0x8A12, 0x8A37,
- 0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, 0x8B7F,
- 0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF, 0xFA24, 0xFA25,
- 0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA},
- { /* category 92 */
- 0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210,
- 0x920A, 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239,
- 0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0,
- 0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28,
- 0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4, 0x93C6,
- 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC, 0xFA29,
- 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F, 0x9751,
- 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C, 0x999E,
- 0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB,
- 0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0x0000, 0x0000,
- 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
- 0x2178, 0x2179, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02}
};
#endif /* JISX0208_H */
diff --git a/Build/source/texk/ptexenc/kanjicnv.c b/Build/source/texk/ptexenc/kanjicnv.c
index 75793863add..d93bbed5f1b 100644
--- a/Build/source/texk/ptexenc/kanjicnv.c
+++ b/Build/source/texk/ptexenc/kanjicnv.c
@@ -5,6 +5,18 @@
#include <ptexenc/c-auto.h>
#include <ptexenc/kanjicnv.h>
+boolean isJISkanji1(int c)
+{
+ c &= 0xff;
+ return (0x21 <= c && c <= 0x7e);
+}
+
+boolean isJISkanji2(int c)
+{
+ c &= 0xff;
+ return (0x21 <= c && c <= 0x7e);
+}
+
boolean isEUCkanji1(int c)
{
c &= 0xff;
@@ -32,11 +44,17 @@ boolean isSJISkanji2(int c)
/* EUC <=> JIS X 0208 code conversion */
int EUCtoJIS(int kcode)
{
+ if ((kcode<=0 || kcode>0x10000)) return 0;
+ if (!isEUCkanji1(HI(kcode))) return 0;
+ if (!isEUCkanji2(LO(kcode))) return 0;
return (kcode & 0x7f7f);
}
int JIStoEUC(int kcode)
{
+ if ((kcode<=0 || kcode>0x10000)) return 0;
+ if (!isJISkanji1(HI(kcode))) return 0;
+ if (!isJISkanji2(LO(kcode))) return 0;
return (kcode | 0x8080);
}
@@ -45,8 +63,9 @@ int SJIStoJIS(int kcode)
{
int byte1, byte2;
- byte1 = HI(kcode);
- byte2 = LO(kcode);
+ if ((kcode<=0 || kcode>0x10000)) return 0;
+ byte1 = HI(kcode); if (!isSJISkanji1(byte1)) return 0;
+ byte2 = LO(kcode); if (!isSJISkanji2(byte2)) return 0;
byte1 -= ( byte1>=0xa0 ) ? 0xc1 : 0x81;
kcode = ((byte1<<1) + 0x21)<<8;
if ( byte2 >= 0x9f ) {
@@ -63,8 +82,9 @@ int JIStoSJIS(int kcode)
int high, low;
int nh, nl;
- high = HI(kcode);
- low = LO(kcode);
+ if ((kcode<=0 || kcode>0x10000)) return 0;
+ high = HI(kcode); if (!isJISkanji1(high)) return 0;
+ low = LO(kcode); if (!isJISkanji2(low)) return 0;
nh = ((high-0x21)>>1) + 0x81;
if (nh > 0x9f) nh += 0x40;
if (high & 1) {
@@ -72,11 +92,7 @@ int JIStoSJIS(int kcode)
if (low > 0x5f) nl++;
} else
nl = low + 0x7e;
- if (isSJISkanji1(nh) && isSJISkanji2(nl)) {
- return HILO(nh, nl);
- } else {
- return 0x813f;
- }
+ return HILO(nh, nl);
}
/* Shift JIS <=> EUC Kanji code conversion */
@@ -94,8 +110,8 @@ int EUCtoSJIS(int kcode)
int KUTENtoJIS(int kcode)
{
/* in case of undefined in kuten code table */
- if (HI(kcode) == 0 || HI(kcode) > 95) return -1;
- if (LO(kcode) == 0 || LO(kcode) > 95) return -1;
+ if (HI(kcode) == 0 || HI(kcode) > 94) return 0;
+ if (LO(kcode) == 0 || LO(kcode) > 94) return 0;
return kcode + 0x2020;
}
diff --git a/Build/source/texk/ptexenc/ptexenc/kanjicnv.h b/Build/source/texk/ptexenc/ptexenc/kanjicnv.h
index 3ca732d5159..d4ddfb378e4 100644
--- a/Build/source/texk/ptexenc/ptexenc/kanjicnv.h
+++ b/Build/source/texk/ptexenc/ptexenc/kanjicnv.h
@@ -11,6 +11,9 @@
#define LO(x) ( ((int)(x)) & 0xff)
#define HILO(x,y) ((LO(x) << 8) | LO(y))
+extern boolean isJISkanji1(int c);
+extern boolean isJISkanji2(int c);
+
extern boolean isEUCkanji1(int c);
extern boolean isEUCkanji2(int c);