Changeset 529 for trunk


Ignore:
Timestamp:
Jul 22, 2010, 12:01:37 PM (9 years ago)
Author:
cameron
Message:

Encoding Name validation.

Location:
trunk/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bytelex.h

    r163 r529  
    397397}
    398398
     399template<CodeUnit_Base C>
     400inline bool at_ASCII_letter(unsigned char x8data[]) {
     401        switch (x8data[0]) {
     402                case Ord<C, 'A'>::value: case Ord<C, 'a'>::value:
     403                case Ord<C, 'B'>::value: case Ord<C, 'b'>::value:
     404                case Ord<C, 'C'>::value: case Ord<C, 'c'>::value:
     405                case Ord<C, 'D'>::value: case Ord<C, 'd'>::value:
     406                case Ord<C, 'E'>::value: case Ord<C, 'e'>::value:
     407                case Ord<C, 'F'>::value: case Ord<C, 'f'>::value:
     408                case Ord<C, 'G'>::value: case Ord<C, 'g'>::value:
     409                case Ord<C, 'H'>::value: case Ord<C, 'h'>::value:
     410                case Ord<C, 'I'>::value: case Ord<C, 'i'>::value:
     411                case Ord<C, 'J'>::value: case Ord<C, 'j'>::value:
     412                case Ord<C, 'K'>::value: case Ord<C, 'k'>::value:
     413                case Ord<C, 'L'>::value: case Ord<C, 'l'>::value:
     414                case Ord<C, 'M'>::value: case Ord<C, 'm'>::value:
     415                case Ord<C, 'N'>::value: case Ord<C, 'n'>::value:
     416                case Ord<C, 'O'>::value: case Ord<C, 'o'>::value:
     417                case Ord<C, 'P'>::value: case Ord<C, 'p'>::value:
     418                case Ord<C, 'Q'>::value: case Ord<C, 'q'>::value:
     419                case Ord<C, 'R'>::value: case Ord<C, 'r'>::value:
     420                case Ord<C, 'S'>::value: case Ord<C, 's'>::value:
     421                case Ord<C, 'T'>::value: case Ord<C, 't'>::value:
     422                case Ord<C, 'U'>::value: case Ord<C, 'u'>::value:
     423                case Ord<C, 'V'>::value: case Ord<C, 'v'>::value:
     424                case Ord<C, 'W'>::value: case Ord<C, 'w'>::value:
     425                case Ord<C, 'X'>::value: case Ord<C, 'x'>::value:
     426                case Ord<C, 'Y'>::value: case Ord<C, 'y'>::value:
     427                case Ord<C, 'Z'>::value: case Ord<C, 'z'>::value:
     428                        return true;
     429                default: return false;
     430        }
     431}
     432template<CodeUnit_Base C>
     433inline bool at_ASCII_ncnamechar(unsigned char x8data[]) {
     434        switch (x8data[0]) {
     435                case Ord<C, '0'>::value: case Ord<C, '1'>::value:
     436                case Ord<C, '2'>::value: case Ord<C, '3'>::value:
     437                case Ord<C, '4'>::value: case Ord<C, '5'>::value:
     438                case Ord<C, '6'>::value: case Ord<C, '7'>::value:
     439                case Ord<C, '8'>::value: case Ord<C, '9'>::value:
     440                case Ord<C, 'A'>::value: case Ord<C, 'a'>::value:
     441                case Ord<C, 'B'>::value: case Ord<C, 'b'>::value:
     442                case Ord<C, 'C'>::value: case Ord<C, 'c'>::value:
     443                case Ord<C, 'D'>::value: case Ord<C, 'd'>::value:
     444                case Ord<C, 'E'>::value: case Ord<C, 'e'>::value:
     445                case Ord<C, 'F'>::value: case Ord<C, 'f'>::value:
     446                case Ord<C, 'G'>::value: case Ord<C, 'g'>::value:
     447                case Ord<C, 'H'>::value: case Ord<C, 'h'>::value:
     448                case Ord<C, 'I'>::value: case Ord<C, 'i'>::value:
     449                case Ord<C, 'J'>::value: case Ord<C, 'j'>::value:
     450                case Ord<C, 'K'>::value: case Ord<C, 'k'>::value:
     451                case Ord<C, 'L'>::value: case Ord<C, 'l'>::value:
     452                case Ord<C, 'M'>::value: case Ord<C, 'm'>::value:
     453                case Ord<C, 'N'>::value: case Ord<C, 'n'>::value:
     454                case Ord<C, 'O'>::value: case Ord<C, 'o'>::value:
     455                case Ord<C, 'P'>::value: case Ord<C, 'p'>::value:
     456                case Ord<C, 'Q'>::value: case Ord<C, 'q'>::value:
     457                case Ord<C, 'R'>::value: case Ord<C, 'r'>::value:
     458                case Ord<C, 'S'>::value: case Ord<C, 's'>::value:
     459                case Ord<C, 'T'>::value: case Ord<C, 't'>::value:
     460                case Ord<C, 'U'>::value: case Ord<C, 'u'>::value:
     461                case Ord<C, 'V'>::value: case Ord<C, 'v'>::value:
     462                case Ord<C, 'W'>::value: case Ord<C, 'w'>::value:
     463                case Ord<C, 'X'>::value: case Ord<C, 'x'>::value:
     464                case Ord<C, 'Y'>::value: case Ord<C, 'y'>::value:
     465                case Ord<C, 'Z'>::value: case Ord<C, 'z'>::value:
     466                case Ord<C, '-'>::value: case Ord<C, '.'>::value:
     467                case Ord<C, '_'>::value:
     468                  return true;
     469                default: return false;
     470        }
     471}
    399472template<CodeUnit_Base C>
    400473inline bool at_PubidChar(unsigned char x8data[]) {
  • trunk/src/xmldecl.c

    r166 r529  
    127127
    128128template <CodeUnit_Base C>
    129 inline void XML_Decl_Parser<C>::ScanToQuote() {
    130         int quote_start_pos = buffer_rel_pos;   
    131         while (!AtQuote<C>(cur())) buffer_rel_pos+=1;
     129inline void XML_Decl_Parser<C>::ScanToEncodingName() {
     130        int quote_start_pos = buffer_rel_pos;
     131        if (at_ASCII_letter<C>(cur())) {
     132          buffer_rel_pos+=1;
     133          while (at_ASCII_ncnamechar<C>(cur())) buffer_rel_pos+=1;
     134        }
    132135        if (buffer_rel_pos >= BYTEPLEX_SIZE) {
    133136                byteplex->AdvanceInputBuffer(quote_start_pos);
     
    168171                Advance(1);
    169172                int start_pos = AbsPos();
    170                 ScanToQuote();
     173                ScanToEncodingName();
    171174                if (cur()[0] != quoteCh) DeclError();
    172175                int lgth = AbsPos() - start_pos;
  • trunk/src/xmldecl.h

    r165 r529  
    113113        void DeclError();
    114114        void Scan_WS();
    115         void ScanToQuote();
     115        void ScanToEncodingName();
    116116        void ParseVersion(Entity_Info & e);
    117117        void ParseEncoding(Entity_Info & e);
Note: See TracChangeset for help on using the changeset viewer.