comparison src/coding.c @ 89184:88a9e962e183

(decode_coding_utf_8): Treat surrogates as invalid.
author Dave Love <fx@gnu.org>
date Wed, 09 Oct 2002 22:00:36 +0000
parents 2b9f8973f240
children 311d061195ef
comparison
equal deleted inserted replaced
89183:676dae22b5b1 89184:88a9e962e183
1085 *mask &= CATEGORY_MASK_UTF_8; 1085 *mask &= CATEGORY_MASK_UTF_8;
1086 return 1; 1086 return 1;
1087 } 1087 }
1088 1088
1089 1089
1090 /* Fixme: deal with surrogates? */
1091 static void 1090 static void
1092 decode_coding_utf_8 (coding) 1091 decode_coding_utf_8 (coding)
1093 struct coding_system *coding; 1092 struct coding_system *coding;
1094 { 1093 {
1095 unsigned char *src = coding->source + coding->consumed; 1094 unsigned char *src = coding->source + coding->consumed;
1151 goto invalid_code; 1150 goto invalid_code;
1152 if (UTF_8_3_OCTET_LEADING_P (c1)) 1151 if (UTF_8_3_OCTET_LEADING_P (c1))
1153 { 1152 {
1154 c = (((c1 & 0xF) << 12) 1153 c = (((c1 & 0xF) << 12)
1155 | ((c2 & 0x3F) << 6) | (c3 & 0x3F)); 1154 | ((c2 & 0x3F) << 6) | (c3 & 0x3F));
1156 if (c < 0x800) 1155 if (c < 0x800
1156 || (c >= 0xd800 && c < 0xe000)) /* surrogates (invalid) */
1157 goto invalid_code; 1157 goto invalid_code;
1158 } 1158 }
1159 else 1159 else
1160 { 1160 {
1161 ONE_MORE_BYTE (c4); 1161 ONE_MORE_BYTE (c4);