Mercurial > emacs
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); |
