/[emacs]/emacs/src/coding.c
ViewVC logotype

Diff of /emacs/src/coding.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.239.2.22 by fx, Sun May 26 17:11:04 2002 UTC revision 1.239.2.23 by fx, Mon May 27 22:18:56 2002 UTC
# Line 1078  detect_coding_utf_8 (coding, mask) Line 1078  detect_coding_utf_8 (coding, mask)
1078  }  }
1079    
1080    
1081    /* Fixme: deal with surrogates?  */
1082  static void  static void
1083  decode_coding_utf_8 (coding)  decode_coding_utf_8 (coding)
1084       struct coding_system *coding;       struct coding_system *coding;
# Line 1126  decode_coding_utf_8 (coding) Line 1127  decode_coding_utf_8 (coding)
1127            if (! UTF_8_EXTRA_OCTET_P (c2))            if (! UTF_8_EXTRA_OCTET_P (c2))
1128              goto invalid_code;              goto invalid_code;
1129            if (UTF_8_2_OCTET_LEADING_P (c1))            if (UTF_8_2_OCTET_LEADING_P (c1))
1130              c = ((c1 & 0x1F) << 6) | (c2 & 0x3F);              {
1131                  c = ((c1 & 0x1F) << 6) | (c2 & 0x3F);
1132                  /* Reject overlong sequences here and below.  Encoders
1133                     producing them are incorrect, they can be misleading,
1134                     and they mess up read/write invariance.  */
1135                  if (c < 128)
1136                    goto invalid_code;
1137                }
1138            else            else
1139              {              {
1140                ONE_MORE_BYTE (c3);                ONE_MORE_BYTE (c3);
1141                if (! UTF_8_EXTRA_OCTET_P (c3))                if (! UTF_8_EXTRA_OCTET_P (c3))
1142                  goto invalid_code;                  goto invalid_code;
1143                if (UTF_8_3_OCTET_LEADING_P (c1))                if (UTF_8_3_OCTET_LEADING_P (c1))
1144                  c = (((c1 & 0xF) << 12)                  {
1145                       | ((c2 & 0x3F) << 6) | (c3 & 0x3F));                    c = (((c1 & 0xF) << 12)
1146                           | ((c2 & 0x3F) << 6) | (c3 & 0x3F));
1147                      if (c < 0x800)
1148                        goto invalid_code;
1149                    }
1150                else                else
1151                  {                  {
1152                    ONE_MORE_BYTE (c4);                    ONE_MORE_BYTE (c4);
1153                    if (! UTF_8_EXTRA_OCTET_P (c4))                    if (! UTF_8_EXTRA_OCTET_P (c4))
1154                      goto invalid_code;                      goto invalid_code;
1155                    if (UTF_8_4_OCTET_LEADING_P (c1))                    if (UTF_8_4_OCTET_LEADING_P (c1))
1156                        {
1157                      c = (((c1 & 0x7) << 18) | ((c2 & 0x3F) << 12)                      c = (((c1 & 0x7) << 18) | ((c2 & 0x3F) << 12)
1158                           | ((c3 & 0x3F) << 6) | (c4 & 0x3F));                           | ((c3 & 0x3F) << 6) | (c4 & 0x3F));
1159                        if (c < 0x10000)
1160                          goto invalid_code;
1161                        }
1162                    else                    else
1163                      {                      {
1164                        ONE_MORE_BYTE (c5);                        ONE_MORE_BYTE (c5);
# Line 1153  decode_coding_utf_8 (coding) Line 1169  decode_coding_utf_8 (coding)
1169                            c = (((c1 & 0x3) << 24) | ((c2 & 0x3F) << 18)                            c = (((c1 & 0x3) << 24) | ((c2 & 0x3F) << 18)
1170                                 | ((c3 & 0x3F) << 12) | ((c4 & 0x3F) << 6)                                 | ((c3 & 0x3F) << 12) | ((c4 & 0x3F) << 6)
1171                                 | (c5 & 0x3F));                                 | (c5 & 0x3F));
1172                            if (c > MAX_CHAR)                            if ((c > MAX_CHAR) || (c < 0x200000))
1173                              goto invalid_code;                              goto invalid_code;
1174                          }                          }
1175                        else                        else

Legend:
Removed from v.1.239.2.22  
changed lines
  Added in v.1.239.2.23

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26