Coverage Report

Created: 2026-08-31 07:17

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/expat/expat/lib/xmltok_impl.c
Line
Count
Source
1
/* This file is included (from xmltok.c, 1-3 times depending on XML_MIN_SIZE)!
2
                            __  __            _
3
                         ___\ \/ /_ __   __ _| |_
4
                        / _ \\  /| '_ \ / _` | __|
5
                       |  __//  \| |_) | (_| | |_
6
                        \___/_/\_\ .__/ \__,_|\__|
7
                                 |_| XML parser
8
9
   Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
10
   Copyright (c) 2000      Clark Cooper <coopercc@users.sourceforge.net>
11
   Copyright (c) 2002      Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
12
   Copyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>
13
   Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>
14
   Copyright (c) 2017      Rhodri James <rhodri@wildebeest.org.uk>
15
   Copyright (c) 2018      Benjamin Peterson <benjamin@python.org>
16
   Copyright (c) 2018      Anton Maklakov <antmak.pub@gmail.com>
17
   Copyright (c) 2019      David Loffredo <loffredo@steptools.com>
18
   Copyright (c) 2020      Boris Kolpackov <boris@codesynthesis.com>
19
   Copyright (c) 2022      Martin Ettl <ettl.martin78@googlemail.com>
20
   Copyright (c) 2026      Nick Begg <nick@stunttruck.net>
21
   Licensed under the MIT license:
22
23
   Permission is  hereby granted,  free of charge,  to any  person obtaining
24
   a  copy  of  this  software   and  associated  documentation  files  (the
25
   "Software"),  to  deal in  the  Software  without restriction,  including
26
   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
27
   distribute, sublicense, and/or sell copies of the Software, and to permit
28
   persons  to whom  the Software  is  furnished to  do so,  subject to  the
29
   following conditions:
30
31
   The above copyright  notice and this permission notice  shall be included
32
   in all copies or substantial portions of the Software.
33
34
   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
35
   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
36
   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
37
   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
38
   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
39
   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
40
   USE OR OTHER DEALINGS IN THE SOFTWARE.
41
42
   SPDX-License-Identifier: MIT
43
*/
44
45
#ifdef XML_TOK_IMPL_C
46
47
#  ifndef IS_INVALID_CHAR // i.e. for UTF-16 and XML_MIN_SIZE not defined
48
149M
#    define IS_INVALID_CHAR(enc, ptr, n) (0)
49
#  endif
50
51
#  define INVALID_LEAD_CASE(n, ptr, nextTokPtr)                                \
52
767M
  case BT_LEAD##n:                                                             \
53
767M
    if (end - ptr < n)                                                         \
54
767M
      return XML_TOK_PARTIAL_CHAR;                                             \
55
767M
    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
56
19.5k
      *(nextTokPtr) = (ptr);                                                   \
57
19.5k
      return XML_TOK_INVALID;                                                  \
58
19.5k
    }                                                                          \
59
767M
    ptr += n;                                                                  \
60
767M
    break;
61
62
#  define INVALID_CASES(ptr, nextTokPtr)                                       \
63
9.06M
    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
64
606M
    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
65
606M
    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
66
152M
  case BT_NONXML:                                                              \
67
46.6k
  case BT_MALFORM:                                                             \
68
69.8k
  case BT_TRAIL:                                                               \
69
69.8k
    *(nextTokPtr) = (ptr);                                                     \
70
69.8k
    return XML_TOK_INVALID;
71
72
#  define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr)                        \
73
8.26M
  case BT_LEAD##n:                                                             \
74
8.26M
    if (end - ptr < n)                                                         \
75
8.19M
      return XML_TOK_PARTIAL_CHAR;                                             \
76
8.24M
    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
77
53.0k
      *nextTokPtr = ptr;                                                       \
78
53.0k
      return XML_TOK_INVALID;                                                  \
79
53.0k
    }                                                                          \
80
8.24M
    ptr += n;                                                                  \
81
8.19M
    break;
82
83
#  define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)                          \
84
1.58G
  case BT_NONASCII:                                                            \
85
1.58G
    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
86
39.3k
      *nextTokPtr = ptr;                                                       \
87
39.3k
      return XML_TOK_INVALID;                                                  \
88
39.3k
    }                                                                          \
89
1.58G
    EXPAT_FALLTHROUGH;                                                         \
90
812M
  case BT_NMSTRT:                                                              \
91
1.16G
  case BT_HEX:                                                                 \
92
1.52G
  case BT_DIGIT:                                                               \
93
1.54G
  case BT_NAME:                                                                \
94
1.58G
  case BT_MINUS:                                                               \
95
1.58G
    ptr += MINBPC(enc);                                                        \
96
1.58G
    break;                                                                     \
97
1.58G
    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
98
6.58M
    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
99
1.61M
    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
100
101
#  define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr)                      \
102
1.01M
  case BT_LEAD##n:                                                             \
103
1.01M
    if ((end) - (ptr) < (n))                                                   \
104
956k
      return XML_TOK_PARTIAL_CHAR;                                             \
105
994k
    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
106
38.6k
      *nextTokPtr = ptr;                                                       \
107
38.6k
      return XML_TOK_INVALID;                                                  \
108
38.6k
    }                                                                          \
109
994k
    ptr += n;                                                                  \
110
956k
    break;
111
112
#  define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)                        \
113
565M
  case BT_NONASCII:                                                            \
114
565M
    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
115
17.4k
      *nextTokPtr = ptr;                                                       \
116
17.4k
      return XML_TOK_INVALID;                                                  \
117
17.4k
    }                                                                          \
118
565M
    EXPAT_FALLTHROUGH;                                                         \
119
411M
  case BT_NMSTRT:                                                              \
120
565M
  case BT_HEX:                                                                 \
121
565M
    ptr += MINBPC(enc);                                                        \
122
565M
    break;                                                                     \
123
565M
    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
124
726k
    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
125
229k
    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
126
127
#  ifndef PREFIX
128
#    define PREFIX(ident) ident
129
#  endif
130
131
#  define HAS_CHARS(enc, ptr, end, count)                                      \
132
171G
    ((end) - (ptr) >= ((count) * MINBPC(enc)))
133
134
5.15G
#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
135
136
#  define REQUIRE_CHARS(enc, ptr, end, count)                                  \
137
4.31G
    {                                                                          \
138
4.31G
      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
139
106k
        return XML_TOK_PARTIAL;                                                \
140
106k
      }                                                                        \
141
4.31G
    }
142
143
4.30G
#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
144
145
/* ptr points to character following "<!-" */
146
147
static int PTRCALL
148
PREFIX(scanComment)(const ENCODING *enc, const char *ptr, const char *end,
149
118k
                    const char **nextTokPtr) {
150
118k
  if (HAS_CHAR(enc, ptr, end)) {
151
117k
    if (! CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
152
3.13k
      *nextTokPtr = ptr;
153
3.13k
      return XML_TOK_INVALID;
154
3.13k
    }
155
114k
    ptr += MINBPC(enc);
156
647M
    while (HAS_CHAR(enc, ptr, end)) {
157
647M
      switch (BYTE_TYPE(enc, ptr)) {
158
149M
        INVALID_CASES(ptr, nextTokPtr)
159
3.64M
      case BT_MINUS:
160
3.64M
        ptr += MINBPC(enc);
161
3.64M
        REQUIRE_CHAR(enc, ptr, end);
162
3.63M
        if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
163
79.2k
          ptr += MINBPC(enc);
164
79.2k
          REQUIRE_CHAR(enc, ptr, end);
165
78.0k
          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
166
11.5k
            *nextTokPtr = ptr;
167
11.5k
            return XML_TOK_INVALID;
168
11.5k
          }
169
66.5k
          *nextTokPtr = ptr + MINBPC(enc);
170
66.5k
          return XML_TOK_COMMENT;
171
78.0k
        }
172
3.55M
        break;
173
568M
      default:
174
568M
        ptr += MINBPC(enc);
175
568M
        break;
176
647M
      }
177
647M
    }
178
114k
  }
179
20.5k
  return XML_TOK_PARTIAL;
180
118k
}
xmltok.c:normal_scanComment
Line
Count
Source
149
62.8k
                    const char **nextTokPtr) {
150
62.8k
  if (HAS_CHAR(enc, ptr, end)) {
151
62.5k
    if (! CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
152
878
      *nextTokPtr = ptr;
153
878
      return XML_TOK_INVALID;
154
878
    }
155
61.6k
    ptr += MINBPC(enc);
156
95.6M
    while (HAS_CHAR(enc, ptr, end)) {
157
95.6M
      switch (BYTE_TYPE(enc, ptr)) {
158
115M
        INVALID_CASES(ptr, nextTokPtr)
159
3.42M
      case BT_MINUS:
160
3.42M
        ptr += MINBPC(enc);
161
3.42M
        REQUIRE_CHAR(enc, ptr, end);
162
3.42M
        if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
163
52.2k
          ptr += MINBPC(enc);
164
52.2k
          REQUIRE_CHAR(enc, ptr, end);
165
51.8k
          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
166
2.49k
            *nextTokPtr = ptr;
167
2.49k
            return XML_TOK_INVALID;
168
2.49k
          }
169
49.3k
          *nextTokPtr = ptr + MINBPC(enc);
170
49.3k
          return XML_TOK_COMMENT;
171
51.8k
        }
172
3.37M
        break;
173
34.4M
      default:
174
34.4M
        ptr += MINBPC(enc);
175
34.4M
        break;
176
95.6M
      }
177
95.6M
    }
178
61.6k
  }
179
5.49k
  return XML_TOK_PARTIAL;
180
62.8k
}
xmltok.c:little2_scanComment
Line
Count
Source
149
28.1k
                    const char **nextTokPtr) {
150
28.1k
  if (HAS_CHAR(enc, ptr, end)) {
151
27.5k
    if (! CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
152
1.45k
      *nextTokPtr = ptr;
153
1.45k
      return XML_TOK_INVALID;
154
1.45k
    }
155
26.1k
    ptr += MINBPC(enc);
156
325M
    while (HAS_CHAR(enc, ptr, end)) {
157
325M
      switch (BYTE_TYPE(enc, ptr)) {
158
14.9M
        INVALID_CASES(ptr, nextTokPtr)
159
109k
      case BT_MINUS:
160
109k
        ptr += MINBPC(enc);
161
109k
        REQUIRE_CHAR(enc, ptr, end);
162
109k
        if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
163
13.3k
          ptr += MINBPC(enc);
164
13.3k
          REQUIRE_CHAR(enc, ptr, end);
165
12.9k
          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
166
4.29k
            *nextTokPtr = ptr;
167
4.29k
            return XML_TOK_INVALID;
168
4.29k
          }
169
8.67k
          *nextTokPtr = ptr + MINBPC(enc);
170
8.67k
          return XML_TOK_COMMENT;
171
12.9k
        }
172
95.7k
        break;
173
317M
      default:
174
317M
        ptr += MINBPC(enc);
175
317M
        break;
176
325M
      }
177
325M
    }
178
26.1k
  }
179
7.16k
  return XML_TOK_PARTIAL;
180
28.1k
}
xmltok.c:big2_scanComment
Line
Count
Source
149
28.0k
                    const char **nextTokPtr) {
150
28.0k
  if (HAS_CHAR(enc, ptr, end)) {
151
27.5k
    if (! CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
152
808
      *nextTokPtr = ptr;
153
808
      return XML_TOK_INVALID;
154
808
    }
155
26.7k
    ptr += MINBPC(enc);
156
226M
    while (HAS_CHAR(enc, ptr, end)) {
157
226M
      switch (BYTE_TYPE(enc, ptr)) {
158
18.7M
        INVALID_CASES(ptr, nextTokPtr)
159
100k
      case BT_MINUS:
160
100k
        ptr += MINBPC(enc);
161
100k
        REQUIRE_CHAR(enc, ptr, end);
162
100k
        if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
163
13.5k
          ptr += MINBPC(enc);
164
13.5k
          REQUIRE_CHAR(enc, ptr, end);
165
13.3k
          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
166
4.75k
            *nextTokPtr = ptr;
167
4.75k
            return XML_TOK_INVALID;
168
4.75k
          }
169
8.56k
          *nextTokPtr = ptr + MINBPC(enc);
170
8.56k
          return XML_TOK_COMMENT;
171
13.3k
        }
172
86.5k
        break;
173
216M
      default:
174
216M
        ptr += MINBPC(enc);
175
216M
        break;
176
226M
      }
177
226M
    }
178
26.7k
  }
179
7.90k
  return XML_TOK_PARTIAL;
180
28.0k
}
181
182
/* ptr points to character following "<!" */
183
184
static int PTRCALL
185
PREFIX(scanDecl)(const ENCODING *enc, const char *ptr, const char *end,
186
1.12M
                 const char **nextTokPtr) {
187
1.12M
  REQUIRE_CHAR(enc, ptr, end);
188
1.11M
  switch (BYTE_TYPE(enc, ptr)) {
189
72.6k
  case BT_MINUS:
190
72.6k
    return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
191
128k
  case BT_LSQB:
192
128k
    *nextTokPtr = ptr + MINBPC(enc);
193
128k
    return XML_TOK_COND_SECT_OPEN;
194
55.4k
  case BT_NMSTRT:
195
909k
  case BT_HEX:
196
909k
    ptr += MINBPC(enc);
197
909k
    break;
198
8.41k
  default:
199
8.41k
    *nextTokPtr = ptr;
200
8.41k
    return XML_TOK_INVALID;
201
1.11M
  }
202
7.81M
  while (HAS_CHAR(enc, ptr, end)) {
203
7.81M
    switch (BYTE_TYPE(enc, ptr)) {
204
22.6k
    case BT_PERCNT:
205
22.6k
      REQUIRE_CHARS(enc, ptr, end, 2);
206
      /* don't allow <!ENTITY% foo "whatever"> */
207
20.8k
      switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
208
652
      case BT_S:
209
1.30k
      case BT_CR:
210
1.73k
      case BT_LF:
211
2.25k
      case BT_PERCNT:
212
2.25k
        *nextTokPtr = ptr;
213
2.25k
        return XML_TOK_INVALID;
214
20.8k
      }
215
18.5k
      EXPAT_FALLTHROUGH;
216
495k
    case BT_S:
217
737k
    case BT_CR:
218
890k
    case BT_LF:
219
890k
      *nextTokPtr = ptr;
220
890k
      return XML_TOK_DECL_OPEN;
221
4.91M
    case BT_NMSTRT:
222
6.91M
    case BT_HEX:
223
6.91M
      ptr += MINBPC(enc);
224
6.91M
      break;
225
9.45k
    default:
226
9.45k
      *nextTokPtr = ptr;
227
9.45k
      return XML_TOK_INVALID;
228
7.81M
    }
229
7.81M
  }
230
5.01k
  return XML_TOK_PARTIAL;
231
909k
}
xmltok.c:normal_scanDecl
Line
Count
Source
186
757k
                 const char **nextTokPtr) {
187
757k
  REQUIRE_CHAR(enc, ptr, end);
188
757k
  switch (BYTE_TYPE(enc, ptr)) {
189
39.3k
  case BT_MINUS:
190
39.3k
    return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
191
74.6k
  case BT_LSQB:
192
74.6k
    *nextTokPtr = ptr + MINBPC(enc);
193
74.6k
    return XML_TOK_COND_SECT_OPEN;
194
28.3k
  case BT_NMSTRT:
195
642k
  case BT_HEX:
196
642k
    ptr += MINBPC(enc);
197
642k
    break;
198
882
  default:
199
882
    *nextTokPtr = ptr;
200
882
    return XML_TOK_INVALID;
201
757k
  }
202
6.13M
  while (HAS_CHAR(enc, ptr, end)) {
203
6.13M
    switch (BYTE_TYPE(enc, ptr)) {
204
11.1k
    case BT_PERCNT:
205
11.1k
      REQUIRE_CHARS(enc, ptr, end, 2);
206
      /* don't allow <!ENTITY% foo "whatever"> */
207
10.5k
      switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
208
260
      case BT_S:
209
521
      case BT_CR:
210
682
      case BT_LF:
211
816
      case BT_PERCNT:
212
816
        *nextTokPtr = ptr;
213
816
        return XML_TOK_INVALID;
214
10.5k
      }
215
9.77k
      EXPAT_FALLTHROUGH;
216
326k
    case BT_S:
217
522k
    case BT_CR:
218
636k
    case BT_LF:
219
636k
      *nextTokPtr = ptr;
220
636k
      return XML_TOK_DECL_OPEN;
221
3.75M
    case BT_NMSTRT:
222
5.49M
    case BT_HEX:
223
5.49M
      ptr += MINBPC(enc);
224
5.49M
      break;
225
2.55k
    default:
226
2.55k
      *nextTokPtr = ptr;
227
2.55k
      return XML_TOK_INVALID;
228
6.13M
    }
229
6.13M
  }
230
1.75k
  return XML_TOK_PARTIAL;
231
642k
}
xmltok.c:little2_scanDecl
Line
Count
Source
186
178k
                 const char **nextTokPtr) {
187
178k
  REQUIRE_CHAR(enc, ptr, end);
188
178k
  switch (BYTE_TYPE(enc, ptr)) {
189
17.1k
  case BT_MINUS:
190
17.1k
    return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
191
27.6k
  case BT_LSQB:
192
27.6k
    *nextTokPtr = ptr + MINBPC(enc);
193
27.6k
    return XML_TOK_COND_SECT_OPEN;
194
12.1k
  case BT_NMSTRT:
195
129k
  case BT_HEX:
196
129k
    ptr += MINBPC(enc);
197
129k
    break;
198
3.67k
  default:
199
3.67k
    *nextTokPtr = ptr;
200
3.67k
    return XML_TOK_INVALID;
201
178k
  }
202
816k
  while (HAS_CHAR(enc, ptr, end)) {
203
816k
    switch (BYTE_TYPE(enc, ptr)) {
204
6.10k
    case BT_PERCNT:
205
6.10k
      REQUIRE_CHARS(enc, ptr, end, 2);
206
      /* don't allow <!ENTITY% foo "whatever"> */
207
5.77k
      switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
208
132
      case BT_S:
209
392
      case BT_CR:
210
524
      case BT_LF:
211
784
      case BT_PERCNT:
212
784
        *nextTokPtr = ptr;
213
784
        return XML_TOK_INVALID;
214
5.77k
      }
215
4.98k
      EXPAT_FALLTHROUGH;
216
86.1k
    case BT_S:
217
110k
    case BT_CR:
218
123k
    case BT_LF:
219
123k
      *nextTokPtr = ptr;
220
123k
      return XML_TOK_DECL_OPEN;
221
560k
    case BT_NMSTRT:
222
687k
    case BT_HEX:
223
687k
      ptr += MINBPC(enc);
224
687k
      break;
225
3.61k
    default:
226
3.61k
      *nextTokPtr = ptr;
227
3.61k
      return XML_TOK_INVALID;
228
816k
    }
229
816k
  }
230
1.29k
  return XML_TOK_PARTIAL;
231
129k
}
xmltok.c:big2_scanDecl
Line
Count
Source
186
184k
                 const char **nextTokPtr) {
187
184k
  REQUIRE_CHAR(enc, ptr, end);
188
183k
  switch (BYTE_TYPE(enc, ptr)) {
189
16.1k
  case BT_MINUS:
190
16.1k
    return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
191
26.3k
  case BT_LSQB:
192
26.3k
    *nextTokPtr = ptr + MINBPC(enc);
193
26.3k
    return XML_TOK_COND_SECT_OPEN;
194
14.9k
  case BT_NMSTRT:
195
137k
  case BT_HEX:
196
137k
    ptr += MINBPC(enc);
197
137k
    break;
198
3.85k
  default:
199
3.85k
    *nextTokPtr = ptr;
200
3.85k
    return XML_TOK_INVALID;
201
183k
  }
202
866k
  while (HAS_CHAR(enc, ptr, end)) {
203
866k
    switch (BYTE_TYPE(enc, ptr)) {
204
5.43k
    case BT_PERCNT:
205
5.43k
      REQUIRE_CHARS(enc, ptr, end, 2);
206
      /* don't allow <!ENTITY% foo "whatever"> */
207
4.44k
      switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
208
260
      case BT_S:
209
392
      case BT_CR:
210
524
      case BT_LF:
211
656
      case BT_PERCNT:
212
656
        *nextTokPtr = ptr;
213
656
        return XML_TOK_INVALID;
214
4.44k
      }
215
3.79k
      EXPAT_FALLTHROUGH;
216
83.2k
    case BT_S:
217
104k
    case BT_CR:
218
130k
    case BT_LF:
219
130k
      *nextTokPtr = ptr;
220
130k
      return XML_TOK_DECL_OPEN;
221
600k
    case BT_NMSTRT:
222
731k
    case BT_HEX:
223
731k
      ptr += MINBPC(enc);
224
731k
      break;
225
3.29k
    default:
226
3.29k
      *nextTokPtr = ptr;
227
3.29k
      return XML_TOK_INVALID;
228
866k
    }
229
866k
  }
230
1.97k
  return XML_TOK_PARTIAL;
231
137k
}
232
233
static int PTRCALL
234
PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end,
235
643k
                      int *tokPtr) {
236
643k
  int upper = 0;
237
643k
  UNUSED_P(enc);
238
643k
  *tokPtr = XML_TOK_PI;
239
643k
  if (end - ptr != MINBPC(enc) * 3)
240
458k
    return 1;
241
184k
  switch (BYTE_TO_ASCII(enc, ptr)) {
242
104k
  case ASCII_x:
243
104k
    break;
244
38.9k
  case ASCII_X:
245
38.9k
    upper = 1;
246
38.9k
    break;
247
40.7k
  default:
248
40.7k
    return 1;
249
184k
  }
250
143k
  ptr += MINBPC(enc);
251
143k
  switch (BYTE_TO_ASCII(enc, ptr)) {
252
82.0k
  case ASCII_m:
253
82.0k
    break;
254
27.8k
  case ASCII_M:
255
27.8k
    upper = 1;
256
27.8k
    break;
257
33.5k
  default:
258
33.5k
    return 1;
259
143k
  }
260
109k
  ptr += MINBPC(enc);
261
109k
  switch (BYTE_TO_ASCII(enc, ptr)) {
262
49.3k
  case ASCII_l:
263
49.3k
    break;
264
1.78k
  case ASCII_L:
265
1.78k
    upper = 1;
266
1.78k
    break;
267
58.7k
  default:
268
58.7k
    return 1;
269
109k
  }
270
51.1k
  if (upper)
271
2.66k
    return 0;
272
48.4k
  *tokPtr = XML_TOK_XML_DECL;
273
48.4k
  return 1;
274
51.1k
}
xmltok.c:normal_checkPiTarget
Line
Count
Source
235
454k
                      int *tokPtr) {
236
454k
  int upper = 0;
237
454k
  UNUSED_P(enc);
238
454k
  *tokPtr = XML_TOK_PI;
239
454k
  if (end - ptr != MINBPC(enc) * 3)
240
351k
    return 1;
241
102k
  switch (BYTE_TO_ASCII(enc, ptr)) {
242
67.6k
  case ASCII_x:
243
67.6k
    break;
244
17.5k
  case ASCII_X:
245
17.5k
    upper = 1;
246
17.5k
    break;
247
17.7k
  default:
248
17.7k
    return 1;
249
102k
  }
250
85.1k
  ptr += MINBPC(enc);
251
85.1k
  switch (BYTE_TO_ASCII(enc, ptr)) {
252
58.3k
  case ASCII_m:
253
58.3k
    break;
254
11.8k
  case ASCII_M:
255
11.8k
    upper = 1;
256
11.8k
    break;
257
15.0k
  default:
258
15.0k
    return 1;
259
85.1k
  }
260
70.1k
  ptr += MINBPC(enc);
261
70.1k
  switch (BYTE_TO_ASCII(enc, ptr)) {
262
42.9k
  case ASCII_l:
263
42.9k
    break;
264
545
  case ASCII_L:
265
545
    upper = 1;
266
545
    break;
267
26.6k
  default:
268
26.6k
    return 1;
269
70.1k
  }
270
43.4k
  if (upper)
271
972
    return 0;
272
42.4k
  *tokPtr = XML_TOK_XML_DECL;
273
42.4k
  return 1;
274
43.4k
}
xmltok.c:little2_checkPiTarget
Line
Count
Source
235
93.3k
                      int *tokPtr) {
236
93.3k
  int upper = 0;
237
93.3k
  UNUSED_P(enc);
238
93.3k
  *tokPtr = XML_TOK_PI;
239
93.3k
  if (end - ptr != MINBPC(enc) * 3)
240
53.0k
    return 1;
241
40.3k
  switch (BYTE_TO_ASCII(enc, ptr)) {
242
20.2k
  case ASCII_x:
243
20.2k
    break;
244
9.39k
  case ASCII_X:
245
9.39k
    upper = 1;
246
9.39k
    break;
247
10.7k
  default:
248
10.7k
    return 1;
249
40.3k
  }
250
29.6k
  ptr += MINBPC(enc);
251
29.6k
  switch (BYTE_TO_ASCII(enc, ptr)) {
252
13.2k
  case ASCII_m:
253
13.2k
    break;
254
7.36k
  case ASCII_M:
255
7.36k
    upper = 1;
256
7.36k
    break;
257
9.02k
  default:
258
9.02k
    return 1;
259
29.6k
  }
260
20.6k
  ptr += MINBPC(enc);
261
20.6k
  switch (BYTE_TO_ASCII(enc, ptr)) {
262
3.59k
  case ASCII_l:
263
3.59k
    break;
264
558
  case ASCII_L:
265
558
    upper = 1;
266
558
    break;
267
16.4k
  default:
268
16.4k
    return 1;
269
20.6k
  }
270
4.15k
  if (upper)
271
821
    return 0;
272
3.33k
  *tokPtr = XML_TOK_XML_DECL;
273
3.33k
  return 1;
274
4.15k
}
xmltok.c:big2_checkPiTarget
Line
Count
Source
235
95.3k
                      int *tokPtr) {
236
95.3k
  int upper = 0;
237
95.3k
  UNUSED_P(enc);
238
95.3k
  *tokPtr = XML_TOK_PI;
239
95.3k
  if (end - ptr != MINBPC(enc) * 3)
240
54.3k
    return 1;
241
40.9k
  switch (BYTE_TO_ASCII(enc, ptr)) {
242
16.6k
  case ASCII_x:
243
16.6k
    break;
244
12.0k
  case ASCII_X:
245
12.0k
    upper = 1;
246
12.0k
    break;
247
12.3k
  default:
248
12.3k
    return 1;
249
40.9k
  }
250
28.6k
  ptr += MINBPC(enc);
251
28.6k
  switch (BYTE_TO_ASCII(enc, ptr)) {
252
10.4k
  case ASCII_m:
253
10.4k
    break;
254
8.69k
  case ASCII_M:
255
8.69k
    upper = 1;
256
8.69k
    break;
257
9.52k
  default:
258
9.52k
    return 1;
259
28.6k
  }
260
19.1k
  ptr += MINBPC(enc);
261
19.1k
  switch (BYTE_TO_ASCII(enc, ptr)) {
262
2.84k
  case ASCII_l:
263
2.84k
    break;
264
679
  case ASCII_L:
265
679
    upper = 1;
266
679
    break;
267
15.6k
  default:
268
15.6k
    return 1;
269
19.1k
  }
270
3.52k
  if (upper)
271
870
    return 0;
272
2.65k
  *tokPtr = XML_TOK_XML_DECL;
273
2.65k
  return 1;
274
3.52k
}
275
276
/* ptr points to character following "<?" */
277
278
static int PTRCALL
279
PREFIX(scanPi)(const ENCODING *enc, const char *ptr, const char *end,
280
698k
               const char **nextTokPtr) {
281
698k
  int tok;
282
698k
  const char *target = ptr;
283
698k
  REQUIRE_CHAR(enc, ptr, end);
284
695k
  switch (BYTE_TYPE(enc, ptr)) {
285
778k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
286
5.83k
  default:
287
5.83k
    *nextTokPtr = ptr;
288
5.83k
    return XML_TOK_INVALID;
289
695k
  }
290
4.21M
  while (HAS_CHAR(enc, ptr, end)) {
291
4.21M
    switch (BYTE_TYPE(enc, ptr)) {
292
19.0M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
293
135k
    case BT_S:
294
323k
    case BT_CR:
295
391k
    case BT_LF:
296
391k
      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
297
1.35k
        *nextTokPtr = ptr;
298
1.35k
        return XML_TOK_INVALID;
299
1.35k
      }
300
390k
      ptr += MINBPC(enc);
301
631M
      while (HAS_CHAR(enc, ptr, end)) {
302
631M
        switch (BYTE_TYPE(enc, ptr)) {
303
399M
          INVALID_CASES(ptr, nextTokPtr)
304
764k
        case BT_QUEST:
305
764k
          ptr += MINBPC(enc);
306
764k
          REQUIRE_CHAR(enc, ptr, end);
307
761k
          if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
308
323k
            *nextTokPtr = ptr + MINBPC(enc);
309
323k
            return tok;
310
323k
          }
311
438k
          break;
312
430M
        default:
313
430M
          ptr += MINBPC(enc);
314
430M
          break;
315
631M
        }
316
631M
      }
317
49.3k
      return XML_TOK_PARTIAL;
318
251k
    case BT_QUEST:
319
251k
      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
320
1.31k
        *nextTokPtr = ptr;
321
1.31k
        return XML_TOK_INVALID;
322
1.31k
      }
323
250k
      ptr += MINBPC(enc);
324
250k
      REQUIRE_CHAR(enc, ptr, end);
325
246k
      if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
326
239k
        *nextTokPtr = ptr + MINBPC(enc);
327
239k
        return tok;
328
239k
      }
329
6.39k
      EXPAT_FALLTHROUGH;
330
17.5k
    default:
331
17.5k
      *nextTokPtr = ptr;
332
17.5k
      return XML_TOK_INVALID;
333
4.21M
    }
334
4.21M
  }
335
13.6k
  return XML_TOK_PARTIAL;
336
680k
}
xmltok.c:normal_scanPi
Line
Count
Source
280
473k
               const char **nextTokPtr) {
281
473k
  int tok;
282
473k
  const char *target = ptr;
283
473k
  REQUIRE_CHAR(enc, ptr, end);
284
472k
  switch (BYTE_TYPE(enc, ptr)) {
285
461k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
286
1.38k
  default:
287
1.38k
    *nextTokPtr = ptr;
288
1.38k
    return XML_TOK_INVALID;
289
472k
  }
290
1.09M
  while (HAS_CHAR(enc, ptr, end)) {
291
1.09M
    switch (BYTE_TYPE(enc, ptr)) {
292
2.06M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
293
81.8k
    case BT_S:
294
241k
    case BT_CR:
295
279k
    case BT_LF:
296
279k
      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
297
501
        *nextTokPtr = ptr;
298
501
        return XML_TOK_INVALID;
299
501
      }
300
278k
      ptr += MINBPC(enc);
301
213M
      while (HAS_CHAR(enc, ptr, end)) {
302
213M
        switch (BYTE_TYPE(enc, ptr)) {
303
374M
          INVALID_CASES(ptr, nextTokPtr)
304
605k
        case BT_QUEST:
305
605k
          ptr += MINBPC(enc);
306
605k
          REQUIRE_CHAR(enc, ptr, end);
307
604k
          if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
308
253k
            *nextTokPtr = ptr + MINBPC(enc);
309
253k
            return tok;
310
253k
          }
311
351k
          break;
312
26.0M
        default:
313
26.0M
          ptr += MINBPC(enc);
314
26.0M
          break;
315
213M
        }
316
213M
      }
317
19.8k
      return XML_TOK_PARTIAL;
318
175k
    case BT_QUEST:
319
175k
      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
320
471
        *nextTokPtr = ptr;
321
471
        return XML_TOK_INVALID;
322
471
      }
323
174k
      ptr += MINBPC(enc);
324
174k
      REQUIRE_CHAR(enc, ptr, end);
325
173k
      if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
326
171k
        *nextTokPtr = ptr + MINBPC(enc);
327
171k
        return tok;
328
171k
      }
329
1.68k
      EXPAT_FALLTHROUGH;
330
5.39k
    default:
331
5.39k
      *nextTokPtr = ptr;
332
5.39k
      return XML_TOK_INVALID;
333
1.09M
    }
334
1.09M
  }
335
4.65k
  return XML_TOK_PARTIAL;
336
467k
}
xmltok.c:little2_scanPi
Line
Count
Source
280
110k
               const char **nextTokPtr) {
281
110k
  int tok;
282
110k
  const char *target = ptr;
283
110k
  REQUIRE_CHAR(enc, ptr, end);
284
110k
  switch (BYTE_TYPE(enc, ptr)) {
285
156k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
286
2.40k
  default:
287
2.40k
    *nextTokPtr = ptr;
288
2.40k
    return XML_TOK_INVALID;
289
110k
  }
290
2.32M
  while (HAS_CHAR(enc, ptr, end)) {
291
2.32M
    switch (BYTE_TYPE(enc, ptr)) {
292
13.0M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
293
25.8k
    case BT_S:
294
41.2k
    case BT_CR:
295
55.1k
    case BT_LF:
296
55.1k
      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
297
460
        *nextTokPtr = ptr;
298
460
        return XML_TOK_INVALID;
299
460
      }
300
54.6k
      ptr += MINBPC(enc);
301
191M
      while (HAS_CHAR(enc, ptr, end)) {
302
191M
        switch (BYTE_TYPE(enc, ptr)) {
303
14.3M
          INVALID_CASES(ptr, nextTokPtr)
304
81.0k
        case BT_QUEST:
305
81.0k
          ptr += MINBPC(enc);
306
81.0k
          REQUIRE_CHAR(enc, ptr, end);
307
80.2k
          if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
308
34.4k
            *nextTokPtr = ptr + MINBPC(enc);
309
34.4k
            return tok;
310
34.4k
          }
311
45.7k
          break;
312
184M
        default:
313
184M
          ptr += MINBPC(enc);
314
184M
          break;
315
191M
        }
316
191M
      }
317
14.5k
      return XML_TOK_PARTIAL;
318
38.2k
    case BT_QUEST:
319
38.2k
      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
320
361
        *nextTokPtr = ptr;
321
361
        return XML_TOK_INVALID;
322
361
      }
323
37.9k
      ptr += MINBPC(enc);
324
37.9k
      REQUIRE_CHAR(enc, ptr, end);
325
36.3k
      if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
326
33.7k
        *nextTokPtr = ptr + MINBPC(enc);
327
33.7k
        return tok;
328
33.7k
      }
329
2.63k
      EXPAT_FALLTHROUGH;
330
6.27k
    default:
331
6.27k
      *nextTokPtr = ptr;
332
6.27k
      return XML_TOK_INVALID;
333
2.32M
    }
334
2.32M
  }
335
3.76k
  return XML_TOK_PARTIAL;
336
104k
}
xmltok.c:big2_scanPi
Line
Count
Source
280
114k
               const char **nextTokPtr) {
281
114k
  int tok;
282
114k
  const char *target = ptr;
283
114k
  REQUIRE_CHAR(enc, ptr, end);
284
113k
  switch (BYTE_TYPE(enc, ptr)) {
285
160k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
286
2.04k
  default:
287
2.04k
    *nextTokPtr = ptr;
288
2.04k
    return XML_TOK_INVALID;
289
113k
  }
290
797k
  while (HAS_CHAR(enc, ptr, end)) {
291
797k
    switch (BYTE_TYPE(enc, ptr)) {
292
3.93M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
293
28.2k
    case BT_S:
294
40.8k
    case BT_CR:
295
56.9k
    case BT_LF:
296
56.9k
      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
297
392
        *nextTokPtr = ptr;
298
392
        return XML_TOK_INVALID;
299
392
      }
300
56.5k
      ptr += MINBPC(enc);
301
225M
      while (HAS_CHAR(enc, ptr, end)) {
302
225M
        switch (BYTE_TYPE(enc, ptr)) {
303
10.5M
          INVALID_CASES(ptr, nextTokPtr)
304
77.3k
        case BT_QUEST:
305
77.3k
          ptr += MINBPC(enc);
306
77.3k
          REQUIRE_CHAR(enc, ptr, end);
307
76.5k
          if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
308
35.9k
            *nextTokPtr = ptr + MINBPC(enc);
309
35.9k
            return tok;
310
35.9k
          }
311
40.5k
          break;
312
220M
        default:
313
220M
          ptr += MINBPC(enc);
314
220M
          break;
315
225M
        }
316
225M
      }
317
14.9k
      return XML_TOK_PARTIAL;
318
38.3k
    case BT_QUEST:
319
38.3k
      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
320
478
        *nextTokPtr = ptr;
321
478
        return XML_TOK_INVALID;
322
478
      }
323
37.8k
      ptr += MINBPC(enc);
324
37.8k
      REQUIRE_CHAR(enc, ptr, end);
325
36.3k
      if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
326
34.2k
        *nextTokPtr = ptr + MINBPC(enc);
327
34.2k
        return tok;
328
34.2k
      }
329
2.08k
      EXPAT_FALLTHROUGH;
330
5.91k
    default:
331
5.91k
      *nextTokPtr = ptr;
332
5.91k
      return XML_TOK_INVALID;
333
797k
    }
334
797k
  }
335
5.20k
  return XML_TOK_PARTIAL;
336
108k
}
337
338
static int PTRCALL
339
PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr, const char *end,
340
7.68M
                         const char **nextTokPtr) {
341
7.68M
  static const char CDATA_LSQB[]
342
7.68M
      = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
343
7.68M
  int i;
344
7.68M
  UNUSED_P(enc);
345
  /* CDATA[ */
346
7.68M
  REQUIRE_CHARS(enc, ptr, end, 6);
347
53.5M
  for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
348
45.8M
    if (! CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
349
41.8k
      *nextTokPtr = ptr;
350
41.8k
      return XML_TOK_INVALID;
351
41.8k
    }
352
45.8M
  }
353
7.63M
  *nextTokPtr = ptr;
354
7.63M
  return XML_TOK_CDATA_SECT_OPEN;
355
7.67M
}
xmltok.c:normal_scanCdataSection
Line
Count
Source
340
7.62M
                         const char **nextTokPtr) {
341
7.62M
  static const char CDATA_LSQB[]
342
7.62M
      = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
343
7.62M
  int i;
344
7.62M
  UNUSED_P(enc);
345
  /* CDATA[ */
346
7.62M
  REQUIRE_CHARS(enc, ptr, end, 6);
347
53.2M
  for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
348
45.6M
    if (! CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
349
11.0k
      *nextTokPtr = ptr;
350
11.0k
      return XML_TOK_INVALID;
351
11.0k
    }
352
45.6M
  }
353
7.60M
  *nextTokPtr = ptr;
354
7.60M
  return XML_TOK_CDATA_SECT_OPEN;
355
7.61M
}
xmltok.c:little2_scanCdataSection
Line
Count
Source
340
33.8k
                         const char **nextTokPtr) {
341
33.8k
  static const char CDATA_LSQB[]
342
33.8k
      = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
343
33.8k
  int i;
344
33.8k
  UNUSED_P(enc);
345
  /* CDATA[ */
346
33.8k
  REQUIRE_CHARS(enc, ptr, end, 6);
347
125k
  for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
348
109k
    if (! CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
349
15.3k
      *nextTokPtr = ptr;
350
15.3k
      return XML_TOK_INVALID;
351
15.3k
    }
352
109k
  }
353
15.6k
  *nextTokPtr = ptr;
354
15.6k
  return XML_TOK_CDATA_SECT_OPEN;
355
30.9k
}
xmltok.c:big2_scanCdataSection
Line
Count
Source
340
31.5k
                         const char **nextTokPtr) {
341
31.5k
  static const char CDATA_LSQB[]
342
31.5k
      = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
343
31.5k
  int i;
344
31.5k
  UNUSED_P(enc);
345
  /* CDATA[ */
346
31.5k
  REQUIRE_CHARS(enc, ptr, end, 6);
347
108k
  for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
348
95.6k
    if (! CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
349
15.4k
      *nextTokPtr = ptr;
350
15.4k
      return XML_TOK_INVALID;
351
15.4k
    }
352
95.6k
  }
353
13.1k
  *nextTokPtr = ptr;
354
13.1k
  return XML_TOK_CDATA_SECT_OPEN;
355
28.5k
}
356
357
static int PTRCALL
358
PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr, const char *end,
359
24.5M
                        const char **nextTokPtr) {
360
24.5M
  if (ptr >= end)
361
19.7k
    return XML_TOK_NONE;
362
24.5M
  if (MINBPC(enc) > 1) {
363
1.04M
    size_t n = end - ptr;
364
1.04M
    if (n & (MINBPC(enc) - 1)) {
365
234k
      n &= ~(MINBPC(enc) - 1);
366
234k
      if (n == 0)
367
3.31k
        return XML_TOK_PARTIAL;
368
230k
      end = ptr + n;
369
230k
    }
370
1.04M
  }
371
24.5M
  switch (BYTE_TYPE(enc, ptr)) {
372
12.2M
  case BT_RSQB:
373
12.2M
    ptr += MINBPC(enc);
374
12.2M
    REQUIRE_CHAR(enc, ptr, end);
375
12.2M
    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
376
3.55M
      break;
377
8.65M
    ptr += MINBPC(enc);
378
8.65M
    REQUIRE_CHAR(enc, ptr, end);
379
8.65M
    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
380
1.04M
      ptr -= MINBPC(enc);
381
1.04M
      break;
382
1.04M
    }
383
7.60M
    *nextTokPtr = ptr + MINBPC(enc);
384
7.60M
    return XML_TOK_CDATA_SECT_CLOSE;
385
3.63M
  case BT_CR:
386
3.63M
    ptr += MINBPC(enc);
387
3.63M
    REQUIRE_CHAR(enc, ptr, end);
388
3.63M
    if (BYTE_TYPE(enc, ptr) == BT_LF)
389
48.2k
      ptr += MINBPC(enc);
390
3.63M
    *nextTokPtr = ptr;
391
3.63M
    return XML_TOK_DATA_NEWLINE;
392
4.85M
  case BT_LF:
393
4.85M
    *nextTokPtr = ptr + MINBPC(enc);
394
4.85M
    return XML_TOK_DATA_NEWLINE;
395
4.85M
    INVALID_CASES(ptr, nextTokPtr)
396
2.12M
  default:
397
2.12M
    ptr += MINBPC(enc);
398
2.12M
    break;
399
24.5M
  }
400
366M
  while (HAS_CHAR(enc, ptr, end)) {
401
366M
    switch (BYTE_TYPE(enc, ptr)) {
402
0
#  define LEAD_CASE(n)                                                         \
403
237M
  case BT_LEAD##n:                                                             \
404
237M
    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
405
7.10k
      *nextTokPtr = ptr;                                                       \
406
7.10k
      return XML_TOK_DATA_CHARS;                                               \
407
7.10k
    }                                                                          \
408
237M
    ptr += n;                                                                  \
409
237M
    break;
410
1.38M
      LEAD_CASE(2)
411
232M
      LEAD_CASE(3)
412
3.64M
      LEAD_CASE(4)
413
0
#  undef LEAD_CASE
414
1.78k
    case BT_NONXML:
415
1.93k
    case BT_MALFORM:
416
3.61k
    case BT_TRAIL:
417
459k
    case BT_CR:
418
4.77M
    case BT_LF:
419
8.43M
    case BT_RSQB:
420
8.43M
      *nextTokPtr = ptr;
421
8.43M
      return XML_TOK_DATA_CHARS;
422
121M
    default:
423
121M
      ptr += MINBPC(enc);
424
121M
      break;
425
366M
    }
426
366M
  }
427
17.5k
  *nextTokPtr = ptr;
428
17.5k
  return XML_TOK_DATA_CHARS;
429
8.45M
}
xmltok.c:normal_cdataSectionTok
Line
Count
Source
359
23.5M
                        const char **nextTokPtr) {
360
23.5M
  if (ptr >= end)
361
7.86k
    return XML_TOK_NONE;
362
23.5M
  if (MINBPC(enc) > 1) {
363
0
    size_t n = end - ptr;
364
0
    if (n & (MINBPC(enc) - 1)) {
365
0
      n &= ~(MINBPC(enc) - 1);
366
0
      if (n == 0)
367
0
        return XML_TOK_PARTIAL;
368
0
      end = ptr + n;
369
0
    }
370
0
  }
371
23.5M
  switch (BYTE_TYPE(enc, ptr)) {
372
12.0M
  case BT_RSQB:
373
12.0M
    ptr += MINBPC(enc);
374
12.0M
    REQUIRE_CHAR(enc, ptr, end);
375
12.0M
    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
376
3.45M
      break;
377
8.57M
    ptr += MINBPC(enc);
378
8.57M
    REQUIRE_CHAR(enc, ptr, end);
379
8.57M
    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
380
981k
      ptr -= MINBPC(enc);
381
981k
      break;
382
981k
    }
383
7.59M
    *nextTokPtr = ptr + MINBPC(enc);
384
7.59M
    return XML_TOK_CDATA_SECT_CLOSE;
385
3.23M
  case BT_CR:
386
3.23M
    ptr += MINBPC(enc);
387
3.23M
    REQUIRE_CHAR(enc, ptr, end);
388
3.23M
    if (BYTE_TYPE(enc, ptr) == BT_LF)
389
6.10k
      ptr += MINBPC(enc);
390
3.23M
    *nextTokPtr = ptr;
391
3.23M
    return XML_TOK_DATA_NEWLINE;
392
4.74M
  case BT_LF:
393
4.74M
    *nextTokPtr = ptr + MINBPC(enc);
394
4.74M
    return XML_TOK_DATA_NEWLINE;
395
4.74M
    INVALID_CASES(ptr, nextTokPtr)
396
1.84M
  default:
397
1.84M
    ptr += MINBPC(enc);
398
1.84M
    break;
399
23.5M
  }
400
322M
  while (HAS_CHAR(enc, ptr, end)) {
401
322M
    switch (BYTE_TYPE(enc, ptr)) {
402
0
#  define LEAD_CASE(n)                                                         \
403
0
  case BT_LEAD##n:                                                             \
404
0
    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
405
0
      *nextTokPtr = ptr;                                                       \
406
0
      return XML_TOK_DATA_CHARS;                                               \
407
0
    }                                                                          \
408
0
    ptr += n;                                                                  \
409
0
    break;
410
1.38M
      LEAD_CASE(2)
411
232M
      LEAD_CASE(3)
412
2.60M
      LEAD_CASE(4)
413
0
#  undef LEAD_CASE
414
381
    case BT_NONXML:
415
530
    case BT_MALFORM:
416
688
    case BT_TRAIL:
417
186k
    case BT_CR:
418
4.41M
    case BT_LF:
419
7.94M
    case BT_RSQB:
420
7.94M
      *nextTokPtr = ptr;
421
7.94M
      return XML_TOK_DATA_CHARS;
422
78.7M
    default:
423
78.7M
      ptr += MINBPC(enc);
424
78.7M
      break;
425
322M
    }
426
322M
  }
427
6.34k
  *nextTokPtr = ptr;
428
6.34k
  return XML_TOK_DATA_CHARS;
429
7.94M
}
xmltok.c:little2_cdataSectionTok
Line
Count
Source
359
601k
                        const char **nextTokPtr) {
360
601k
  if (ptr >= end)
361
6.20k
    return XML_TOK_NONE;
362
594k
  if (MINBPC(enc) > 1) {
363
594k
    size_t n = end - ptr;
364
594k
    if (n & (MINBPC(enc) - 1)) {
365
145k
      n &= ~(MINBPC(enc) - 1);
366
145k
      if (n == 0)
367
1.61k
        return XML_TOK_PARTIAL;
368
143k
      end = ptr + n;
369
143k
    }
370
594k
  }
371
593k
  switch (BYTE_TYPE(enc, ptr)) {
372
99.7k
  case BT_RSQB:
373
99.7k
    ptr += MINBPC(enc);
374
99.7k
    REQUIRE_CHAR(enc, ptr, end);
375
99.1k
    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
376
62.0k
      break;
377
37.1k
    ptr += MINBPC(enc);
378
37.1k
    REQUIRE_CHAR(enc, ptr, end);
379
36.4k
    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
380
30.6k
      ptr -= MINBPC(enc);
381
30.6k
      break;
382
30.6k
    }
383
5.83k
    *nextTokPtr = ptr + MINBPC(enc);
384
5.83k
    return XML_TOK_CDATA_SECT_CLOSE;
385
225k
  case BT_CR:
386
225k
    ptr += MINBPC(enc);
387
225k
    REQUIRE_CHAR(enc, ptr, end);
388
224k
    if (BYTE_TYPE(enc, ptr) == BT_LF)
389
11.2k
      ptr += MINBPC(enc);
390
224k
    *nextTokPtr = ptr;
391
224k
    return XML_TOK_DATA_NEWLINE;
392
60.1k
  case BT_LF:
393
60.1k
    *nextTokPtr = ptr + MINBPC(enc);
394
60.1k
    return XML_TOK_DATA_NEWLINE;
395
81.1k
    INVALID_CASES(ptr, nextTokPtr)
396
164k
  default:
397
164k
    ptr += MINBPC(enc);
398
164k
    break;
399
593k
  }
400
25.0M
  while (HAS_CHAR(enc, ptr, end)) {
401
25.0M
    switch (BYTE_TYPE(enc, ptr)) {
402
0
#  define LEAD_CASE(n)                                                         \
403
0
  case BT_LEAD##n:                                                             \
404
0
    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
405
0
      *nextTokPtr = ptr;                                                       \
406
0
      return XML_TOK_DATA_CHARS;                                               \
407
0
    }                                                                          \
408
0
    ptr += n;                                                                  \
409
0
    break;
410
0
      LEAD_CASE(2)
411
0
      LEAD_CASE(3)
412
541k
      LEAD_CASE(4)
413
0
#  undef LEAD_CASE
414
918
    case BT_NONXML:
415
918
    case BT_MALFORM:
416
1.74k
    case BT_TRAIL:
417
165k
    case BT_CR:
418
220k
    case BT_LF:
419
286k
    case BT_RSQB:
420
286k
      *nextTokPtr = ptr;
421
286k
      return XML_TOK_DATA_CHARS;
422
24.1M
    default:
423
24.1M
      ptr += MINBPC(enc);
424
24.1M
      break;
425
25.0M
    }
426
25.0M
  }
427
5.69k
  *nextTokPtr = ptr;
428
5.69k
  return XML_TOK_DATA_CHARS;
429
295k
}
xmltok.c:big2_cdataSectionTok
Line
Count
Source
359
457k
                        const char **nextTokPtr) {
360
457k
  if (ptr >= end)
361
5.67k
    return XML_TOK_NONE;
362
451k
  if (MINBPC(enc) > 1) {
363
451k
    size_t n = end - ptr;
364
451k
    if (n & (MINBPC(enc) - 1)) {
365
89.2k
      n &= ~(MINBPC(enc) - 1);
366
89.2k
      if (n == 0)
367
1.70k
        return XML_TOK_PARTIAL;
368
87.5k
      end = ptr + n;
369
87.5k
    }
370
451k
  }
371
449k
  switch (BYTE_TYPE(enc, ptr)) {
372
83.1k
  case BT_RSQB:
373
83.1k
    ptr += MINBPC(enc);
374
83.1k
    REQUIRE_CHAR(enc, ptr, end);
375
82.5k
    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
376
46.2k
      break;
377
36.2k
    ptr += MINBPC(enc);
378
36.2k
    REQUIRE_CHAR(enc, ptr, end);
379
35.6k
    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
380
31.3k
      ptr -= MINBPC(enc);
381
31.3k
      break;
382
31.3k
    }
383
4.29k
    *nextTokPtr = ptr + MINBPC(enc);
384
4.29k
    return XML_TOK_CDATA_SECT_CLOSE;
385
173k
  case BT_CR:
386
173k
    ptr += MINBPC(enc);
387
173k
    REQUIRE_CHAR(enc, ptr, end);
388
172k
    if (BYTE_TYPE(enc, ptr) == BT_LF)
389
30.8k
      ptr += MINBPC(enc);
390
172k
    *nextTokPtr = ptr;
391
172k
    return XML_TOK_DATA_NEWLINE;
392
50.2k
  case BT_LF:
393
50.2k
    *nextTokPtr = ptr + MINBPC(enc);
394
50.2k
    return XML_TOK_DATA_NEWLINE;
395
51.0k
    INVALID_CASES(ptr, nextTokPtr)
396
114k
  default:
397
114k
    ptr += MINBPC(enc);
398
114k
    break;
399
449k
  }
400
18.9M
  while (HAS_CHAR(enc, ptr, end)) {
401
18.9M
    switch (BYTE_TYPE(enc, ptr)) {
402
0
#  define LEAD_CASE(n)                                                         \
403
0
  case BT_LEAD##n:                                                             \
404
0
    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
405
0
      *nextTokPtr = ptr;                                                       \
406
0
      return XML_TOK_DATA_CHARS;                                               \
407
0
    }                                                                          \
408
0
    ptr += n;                                                                  \
409
0
    break;
410
0
      LEAD_CASE(2)
411
0
      LEAD_CASE(3)
412
499k
      LEAD_CASE(4)
413
0
#  undef LEAD_CASE
414
488
    case BT_NONXML:
415
488
    case BT_MALFORM:
416
1.18k
    case BT_TRAIL:
417
108k
    case BT_CR:
418
146k
    case BT_LF:
419
207k
    case BT_RSQB:
420
207k
      *nextTokPtr = ptr;
421
207k
      return XML_TOK_DATA_CHARS;
422
18.2M
    default:
423
18.2M
      ptr += MINBPC(enc);
424
18.2M
      break;
425
18.9M
    }
426
18.9M
  }
427
5.48k
  *nextTokPtr = ptr;
428
5.48k
  return XML_TOK_DATA_CHARS;
429
215k
}
430
431
/* ptr points to character following "</" */
432
433
static int PTRCALL
434
PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr, const char *end,
435
757k
                   const char **nextTokPtr) {
436
757k
  REQUIRE_CHAR(enc, ptr, end);
437
756k
  switch (BYTE_TYPE(enc, ptr)) {
438
579k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
439
2.09k
  default:
440
2.09k
    *nextTokPtr = ptr;
441
2.09k
    return XML_TOK_INVALID;
442
756k
  }
443
20.9M
  while (HAS_CHAR(enc, ptr, end)) {
444
20.9M
    switch (BYTE_TYPE(enc, ptr)) {
445
63.1M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
446
23.7k
    case BT_S:
447
287k
    case BT_CR:
448
311k
    case BT_LF:
449
593k
      for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
450
593k
        switch (BYTE_TYPE(enc, ptr)) {
451
10.2k
        case BT_S:
452
273k
        case BT_CR:
453
284k
        case BT_LF:
454
284k
          break;
455
298k
        case BT_GT:
456
298k
          *nextTokPtr = ptr + MINBPC(enc);
457
298k
          return XML_TOK_END_TAG;
458
10.7k
        default:
459
10.7k
          *nextTokPtr = ptr;
460
10.7k
          return XML_TOK_INVALID;
461
593k
        }
462
593k
      }
463
2.77k
      return XML_TOK_PARTIAL;
464
0
#  ifdef XML_NS
465
79.0k
    case BT_COLON:
466
      /* no need to check qname syntax here,
467
         since end-tag must match exactly */
468
79.0k
      ptr += MINBPC(enc);
469
79.0k
      break;
470
0
#  endif
471
415k
    case BT_GT:
472
415k
      *nextTokPtr = ptr + MINBPC(enc);
473
415k
      return XML_TOK_END_TAG;
474
8.90k
    default:
475
8.90k
      *nextTokPtr = ptr;
476
8.90k
      return XML_TOK_INVALID;
477
20.9M
    }
478
20.9M
  }
479
5.07k
  return XML_TOK_PARTIAL;
480
749k
}
xmltok.c:normal_scanEndTag
Line
Count
Source
435
697k
                   const char **nextTokPtr) {
436
697k
  REQUIRE_CHAR(enc, ptr, end);
437
697k
  switch (BYTE_TYPE(enc, ptr)) {
438
480k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
439
461
  default:
440
461
    *nextTokPtr = ptr;
441
461
    return XML_TOK_INVALID;
442
697k
  }
443
19.1M
  while (HAS_CHAR(enc, ptr, end)) {
444
19.1M
    switch (BYTE_TYPE(enc, ptr)) {
445
53.2M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
446
10.9k
    case BT_S:
447
266k
    case BT_CR:
448
283k
    case BT_LF:
449
545k
      for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
450
545k
        switch (BYTE_TYPE(enc, ptr)) {
451
3.84k
        case BT_S:
452
259k
        case BT_CR:
453
263k
        case BT_LF:
454
263k
          break;
455
280k
        case BT_GT:
456
280k
          *nextTokPtr = ptr + MINBPC(enc);
457
280k
          return XML_TOK_END_TAG;
458
1.48k
        default:
459
1.48k
          *nextTokPtr = ptr;
460
1.48k
          return XML_TOK_INVALID;
461
545k
        }
462
545k
      }
463
741
      return XML_TOK_PARTIAL;
464
0
#  ifdef XML_NS
465
73.9k
    case BT_COLON:
466
      /* no need to check qname syntax here,
467
         since end-tag must match exactly */
468
73.9k
      ptr += MINBPC(enc);
469
73.9k
      break;
470
0
#  endif
471
403k
    case BT_GT:
472
403k
      *nextTokPtr = ptr + MINBPC(enc);
473
403k
      return XML_TOK_END_TAG;
474
2.76k
    default:
475
2.76k
      *nextTokPtr = ptr;
476
2.76k
      return XML_TOK_INVALID;
477
19.1M
    }
478
19.1M
  }
479
1.82k
  return XML_TOK_PARTIAL;
480
694k
}
xmltok.c:little2_scanEndTag
Line
Count
Source
435
27.6k
                   const char **nextTokPtr) {
436
27.6k
  REQUIRE_CHAR(enc, ptr, end);
437
27.4k
  switch (BYTE_TYPE(enc, ptr)) {
438
43.0k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
439
917
  default:
440
917
    *nextTokPtr = ptr;
441
917
    return XML_TOK_INVALID;
442
27.4k
  }
443
1.65M
  while (HAS_CHAR(enc, ptr, end)) {
444
1.65M
    switch (BYTE_TYPE(enc, ptr)) {
445
9.71M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
446
5.37k
    case BT_S:
447
10.1k
    case BT_CR:
448
13.9k
    case BT_LF:
449
23.6k
      for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
450
23.6k
        switch (BYTE_TYPE(enc, ptr)) {
451
3.42k
        case BT_S:
452
7.09k
        case BT_CR:
453
10.6k
        case BT_LF:
454
10.6k
          break;
455
9.10k
        case BT_GT:
456
9.10k
          *nextTokPtr = ptr + MINBPC(enc);
457
9.10k
          return XML_TOK_END_TAG;
458
3.83k
        default:
459
3.83k
          *nextTokPtr = ptr;
460
3.83k
          return XML_TOK_INVALID;
461
23.6k
        }
462
23.6k
      }
463
986
      return XML_TOK_PARTIAL;
464
0
#  ifdef XML_NS
465
2.66k
    case BT_COLON:
466
      /* no need to check qname syntax here,
467
         since end-tag must match exactly */
468
2.66k
      ptr += MINBPC(enc);
469
2.66k
      break;
470
0
#  endif
471
4.28k
    case BT_GT:
472
4.28k
      *nextTokPtr = ptr + MINBPC(enc);
473
4.28k
      return XML_TOK_END_TAG;
474
2.44k
    default:
475
2.44k
      *nextTokPtr = ptr;
476
2.44k
      return XML_TOK_INVALID;
477
1.65M
    }
478
1.65M
  }
479
1.49k
  return XML_TOK_PARTIAL;
480
25.0k
}
xmltok.c:big2_scanEndTag
Line
Count
Source
435
32.4k
                   const char **nextTokPtr) {
436
32.4k
  REQUIRE_CHAR(enc, ptr, end);
437
31.8k
  switch (BYTE_TYPE(enc, ptr)) {
438
56.4k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
439
714
  default:
440
714
    *nextTokPtr = ptr;
441
714
    return XML_TOK_INVALID;
442
31.8k
  }
443
66.2k
  while (HAS_CHAR(enc, ptr, end)) {
444
66.2k
    switch (BYTE_TYPE(enc, ptr)) {
445
156k
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
446
7.47k
    case BT_S:
447
11.1k
    case BT_CR:
448
14.6k
    case BT_LF:
449
24.2k
      for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
450
24.2k
        switch (BYTE_TYPE(enc, ptr)) {
451
2.98k
        case BT_S:
452
7.28k
        case BT_CR:
453
10.6k
        case BT_LF:
454
10.6k
          break;
455
8.14k
        case BT_GT:
456
8.14k
          *nextTokPtr = ptr + MINBPC(enc);
457
8.14k
          return XML_TOK_END_TAG;
458
5.47k
        default:
459
5.47k
          *nextTokPtr = ptr;
460
5.47k
          return XML_TOK_INVALID;
461
24.2k
        }
462
24.2k
      }
463
1.05k
      return XML_TOK_PARTIAL;
464
0
#  ifdef XML_NS
465
2.41k
    case BT_COLON:
466
      /* no need to check qname syntax here,
467
         since end-tag must match exactly */
468
2.41k
      ptr += MINBPC(enc);
469
2.41k
      break;
470
0
#  endif
471
6.88k
    case BT_GT:
472
6.88k
      *nextTokPtr = ptr + MINBPC(enc);
473
6.88k
      return XML_TOK_END_TAG;
474
3.70k
    default:
475
3.70k
      *nextTokPtr = ptr;
476
3.70k
      return XML_TOK_INVALID;
477
66.2k
    }
478
66.2k
  }
479
1.75k
  return XML_TOK_PARTIAL;
480
29.4k
}
481
482
/* ptr points to character following "&#X" */
483
484
static int PTRCALL
485
PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr, const char *end,
486
3.32M
                       const char **nextTokPtr) {
487
3.32M
  if (HAS_CHAR(enc, ptr, end)) {
488
3.32M
    switch (BYTE_TYPE(enc, ptr)) {
489
1.31M
    case BT_DIGIT:
490
3.32M
    case BT_HEX:
491
3.32M
      break;
492
1.88k
    default:
493
1.88k
      *nextTokPtr = ptr;
494
1.88k
      return XML_TOK_INVALID;
495
3.32M
    }
496
11.7M
    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
497
11.7M
      switch (BYTE_TYPE(enc, ptr)) {
498
6.07M
      case BT_DIGIT:
499
8.47M
      case BT_HEX:
500
8.47M
        break;
501
3.30M
      case BT_SEMI:
502
3.30M
        *nextTokPtr = ptr + MINBPC(enc);
503
3.30M
        return XML_TOK_CHAR_REF;
504
7.88k
      default:
505
7.88k
        *nextTokPtr = ptr;
506
7.88k
        return XML_TOK_INVALID;
507
11.7M
      }
508
11.7M
    }
509
3.32M
  }
510
4.45k
  return XML_TOK_PARTIAL;
511
3.32M
}
xmltok.c:normal_scanHexCharRef
Line
Count
Source
486
844k
                       const char **nextTokPtr) {
487
844k
  if (HAS_CHAR(enc, ptr, end)) {
488
843k
    switch (BYTE_TYPE(enc, ptr)) {
489
296k
    case BT_DIGIT:
490
843k
    case BT_HEX:
491
843k
      break;
492
623
    default:
493
623
      *nextTokPtr = ptr;
494
623
      return XML_TOK_INVALID;
495
843k
    }
496
2.94M
    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
497
2.94M
      switch (BYTE_TYPE(enc, ptr)) {
498
1.36M
      case BT_DIGIT:
499
2.09M
      case BT_HEX:
500
2.09M
        break;
501
840k
      case BT_SEMI:
502
840k
        *nextTokPtr = ptr + MINBPC(enc);
503
840k
        return XML_TOK_CHAR_REF;
504
1.25k
      default:
505
1.25k
        *nextTokPtr = ptr;
506
1.25k
        return XML_TOK_INVALID;
507
2.94M
      }
508
2.94M
    }
509
843k
  }
510
1.59k
  return XML_TOK_PARTIAL;
511
844k
}
xmltok.c:little2_scanHexCharRef
Line
Count
Source
486
1.11M
                       const char **nextTokPtr) {
487
1.11M
  if (HAS_CHAR(enc, ptr, end)) {
488
1.11M
    switch (BYTE_TYPE(enc, ptr)) {
489
517k
    case BT_DIGIT:
490
1.11M
    case BT_HEX:
491
1.11M
      break;
492
582
    default:
493
582
      *nextTokPtr = ptr;
494
582
      return XML_TOK_INVALID;
495
1.11M
    }
496
3.75M
    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
497
3.75M
      switch (BYTE_TYPE(enc, ptr)) {
498
1.98M
      case BT_DIGIT:
499
2.64M
      case BT_HEX:
500
2.64M
        break;
501
1.10M
      case BT_SEMI:
502
1.10M
        *nextTokPtr = ptr + MINBPC(enc);
503
1.10M
        return XML_TOK_CHAR_REF;
504
3.44k
      default:
505
3.44k
        *nextTokPtr = ptr;
506
3.44k
        return XML_TOK_INVALID;
507
3.75M
      }
508
3.75M
    }
509
1.11M
  }
510
1.04k
  return XML_TOK_PARTIAL;
511
1.11M
}
xmltok.c:big2_scanHexCharRef
Line
Count
Source
486
1.36M
                       const char **nextTokPtr) {
487
1.36M
  if (HAS_CHAR(enc, ptr, end)) {
488
1.36M
    switch (BYTE_TYPE(enc, ptr)) {
489
501k
    case BT_DIGIT:
490
1.36M
    case BT_HEX:
491
1.36M
      break;
492
675
    default:
493
675
      *nextTokPtr = ptr;
494
675
      return XML_TOK_INVALID;
495
1.36M
    }
496
5.09M
    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
497
5.09M
      switch (BYTE_TYPE(enc, ptr)) {
498
2.72M
      case BT_DIGIT:
499
3.73M
      case BT_HEX:
500
3.73M
        break;
501
1.35M
      case BT_SEMI:
502
1.35M
        *nextTokPtr = ptr + MINBPC(enc);
503
1.35M
        return XML_TOK_CHAR_REF;
504
3.19k
      default:
505
3.19k
        *nextTokPtr = ptr;
506
3.19k
        return XML_TOK_INVALID;
507
5.09M
      }
508
5.09M
    }
509
1.36M
  }
510
1.81k
  return XML_TOK_PARTIAL;
511
1.36M
}
512
513
/* ptr points to character following "&#" */
514
515
static int PTRCALL
516
PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr, const char *end,
517
3.86M
                    const char **nextTokPtr) {
518
3.86M
  if (HAS_CHAR(enc, ptr, end)) {
519
3.86M
    if (CHAR_MATCHES(enc, ptr, ASCII_x))
520
3.32M
      return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
521
540k
    switch (BYTE_TYPE(enc, ptr)) {
522
538k
    case BT_DIGIT:
523
538k
      break;
524
2.33k
    default:
525
2.33k
      *nextTokPtr = ptr;
526
2.33k
      return XML_TOK_INVALID;
527
540k
    }
528
5.27M
    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
529
5.27M
      switch (BYTE_TYPE(enc, ptr)) {
530
4.74M
      case BT_DIGIT:
531
4.74M
        break;
532
529k
      case BT_SEMI:
533
529k
        *nextTokPtr = ptr + MINBPC(enc);
534
529k
        return XML_TOK_CHAR_REF;
535
6.77k
      default:
536
6.77k
        *nextTokPtr = ptr;
537
6.77k
        return XML_TOK_INVALID;
538
5.27M
      }
539
5.27M
    }
540
538k
  }
541
3.33k
  return XML_TOK_PARTIAL;
542
3.86M
}
xmltok.c:normal_scanCharRef
Line
Count
Source
517
1.03M
                    const char **nextTokPtr) {
518
1.03M
  if (HAS_CHAR(enc, ptr, end)) {
519
1.03M
    if (CHAR_MATCHES(enc, ptr, ASCII_x))
520
844k
      return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
521
194k
    switch (BYTE_TYPE(enc, ptr)) {
522
193k
    case BT_DIGIT:
523
193k
      break;
524
767
    default:
525
767
      *nextTokPtr = ptr;
526
767
      return XML_TOK_INVALID;
527
194k
    }
528
4.19M
    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
529
4.19M
      switch (BYTE_TYPE(enc, ptr)) {
530
4.00M
      case BT_DIGIT:
531
4.00M
        break;
532
192k
      case BT_SEMI:
533
192k
        *nextTokPtr = ptr + MINBPC(enc);
534
192k
        return XML_TOK_CHAR_REF;
535
749
      default:
536
749
        *nextTokPtr = ptr;
537
749
        return XML_TOK_INVALID;
538
4.19M
      }
539
4.19M
    }
540
193k
  }
541
1.35k
  return XML_TOK_PARTIAL;
542
1.03M
}
xmltok.c:little2_scanCharRef
Line
Count
Source
517
1.21M
                    const char **nextTokPtr) {
518
1.21M
  if (HAS_CHAR(enc, ptr, end)) {
519
1.21M
    if (CHAR_MATCHES(enc, ptr, ASCII_x))
520
1.11M
      return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
521
100k
    switch (BYTE_TYPE(enc, ptr)) {
522
99.9k
    case BT_DIGIT:
523
99.9k
      break;
524
758
    default:
525
758
      *nextTokPtr = ptr;
526
758
      return XML_TOK_INVALID;
527
100k
    }
528
293k
    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
529
293k
      switch (BYTE_TYPE(enc, ptr)) {
530
194k
      case BT_DIGIT:
531
194k
        break;
532
96.5k
      case BT_SEMI:
533
96.5k
        *nextTokPtr = ptr + MINBPC(enc);
534
96.5k
        return XML_TOK_CHAR_REF;
535
2.90k
      default:
536
2.90k
        *nextTokPtr = ptr;
537
2.90k
        return XML_TOK_INVALID;
538
293k
      }
539
293k
    }
540
99.9k
  }
541
752
  return XML_TOK_PARTIAL;
542
1.21M
}
xmltok.c:big2_scanCharRef
Line
Count
Source
517
1.61M
                    const char **nextTokPtr) {
518
1.61M
  if (HAS_CHAR(enc, ptr, end)) {
519
1.61M
    if (CHAR_MATCHES(enc, ptr, ASCII_x))
520
1.36M
      return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
521
245k
    switch (BYTE_TYPE(enc, ptr)) {
522
245k
    case BT_DIGIT:
523
245k
      break;
524
812
    default:
525
812
      *nextTokPtr = ptr;
526
812
      return XML_TOK_INVALID;
527
245k
    }
528
786k
    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
529
786k
      switch (BYTE_TYPE(enc, ptr)) {
530
542k
      case BT_DIGIT:
531
542k
        break;
532
240k
      case BT_SEMI:
533
240k
        *nextTokPtr = ptr + MINBPC(enc);
534
240k
        return XML_TOK_CHAR_REF;
535
3.11k
      default:
536
3.11k
        *nextTokPtr = ptr;
537
3.11k
        return XML_TOK_INVALID;
538
786k
      }
539
786k
    }
540
245k
  }
541
1.22k
  return XML_TOK_PARTIAL;
542
1.61M
}
543
544
/* ptr points to character following "&" */
545
546
static int PTRCALL
547
PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
548
136M
                const char **nextTokPtr) {
549
136M
  REQUIRE_CHAR(enc, ptr, end);
550
136M
  switch (BYTE_TYPE(enc, ptr)) {
551
110M
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
552
3.86M
  case BT_NUM:
553
3.86M
    return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
554
4.60k
  default:
555
4.60k
    *nextTokPtr = ptr;
556
4.60k
    return XML_TOK_INVALID;
557
136M
  }
558
525M
  while (HAS_CHAR(enc, ptr, end)) {
559
525M
    switch (BYTE_TYPE(enc, ptr)) {
560
1.34G
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
561
132M
    case BT_SEMI:
562
132M
      *nextTokPtr = ptr + MINBPC(enc);
563
132M
      return XML_TOK_ENTITY_REF;
564
10.1k
    default:
565
10.1k
      *nextTokPtr = ptr;
566
10.1k
      return XML_TOK_INVALID;
567
525M
    }
568
525M
  }
569
6.19k
  return XML_TOK_PARTIAL;
570
132M
}
xmltok.c:normal_scanRef
Line
Count
Source
548
123M
                const char **nextTokPtr) {
549
123M
  REQUIRE_CHAR(enc, ptr, end);
550
123M
  switch (BYTE_TYPE(enc, ptr)) {
551
109M
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
552
1.03M
  case BT_NUM:
553
1.03M
    return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
554
1.58k
  default:
555
1.58k
    *nextTokPtr = ptr;
556
1.58k
    return XML_TOK_INVALID;
557
123M
  }
558
513M
  while (HAS_CHAR(enc, ptr, end)) {
559
513M
    switch (BYTE_TYPE(enc, ptr)) {
560
1.33G
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
561
122M
    case BT_SEMI:
562
122M
      *nextTokPtr = ptr + MINBPC(enc);
563
122M
      return XML_TOK_ENTITY_REF;
564
3.51k
    default:
565
3.51k
      *nextTokPtr = ptr;
566
3.51k
      return XML_TOK_INVALID;
567
513M
    }
568
513M
  }
569
2.05k
  return XML_TOK_PARTIAL;
570
122M
}
xmltok.c:little2_scanRef
Line
Count
Source
548
4.36M
                const char **nextTokPtr) {
549
4.36M
  REQUIRE_CHAR(enc, ptr, end);
550
4.36M
  switch (BYTE_TYPE(enc, ptr)) {
551
388k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
552
1.21M
  case BT_NUM:
553
1.21M
    return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
554
1.40k
  default:
555
1.40k
    *nextTokPtr = ptr;
556
1.40k
    return XML_TOK_INVALID;
557
4.36M
  }
558
4.51M
  while (HAS_CHAR(enc, ptr, end)) {
559
4.51M
    switch (BYTE_TYPE(enc, ptr)) {
560
5.66M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
561
3.14M
    case BT_SEMI:
562
3.14M
      *nextTokPtr = ptr + MINBPC(enc);
563
3.14M
      return XML_TOK_ENTITY_REF;
564
3.30k
    default:
565
3.30k
      *nextTokPtr = ptr;
566
3.30k
      return XML_TOK_INVALID;
567
4.51M
    }
568
4.51M
  }
569
2.10k
  return XML_TOK_PARTIAL;
570
3.14M
}
xmltok.c:big2_scanRef
Line
Count
Source
548
7.83M
                const char **nextTokPtr) {
549
7.83M
  REQUIRE_CHAR(enc, ptr, end);
550
7.83M
  switch (BYTE_TYPE(enc, ptr)) {
551
274k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
552
1.61M
  case BT_NUM:
553
1.61M
    return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
554
1.62k
  default:
555
1.62k
    *nextTokPtr = ptr;
556
1.62k
    return XML_TOK_INVALID;
557
7.83M
  }
558
6.77M
  while (HAS_CHAR(enc, ptr, end)) {
559
6.77M
    switch (BYTE_TYPE(enc, ptr)) {
560
2.56M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
561
6.20M
    case BT_SEMI:
562
6.20M
      *nextTokPtr = ptr + MINBPC(enc);
563
6.20M
      return XML_TOK_ENTITY_REF;
564
3.30k
    default:
565
3.30k
      *nextTokPtr = ptr;
566
3.30k
      return XML_TOK_INVALID;
567
6.77M
    }
568
6.77M
  }
569
2.03k
  return XML_TOK_PARTIAL;
570
6.21M
}
571
572
/* ptr points to character following first character of attribute name */
573
574
static int PTRCALL
575
PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
576
20.6M
                 const char **nextTokPtr) {
577
20.6M
#  ifdef XML_NS
578
20.6M
  int hadColon = 0;
579
20.6M
#  endif
580
874M
  while (HAS_CHAR(enc, ptr, end)) {
581
874M
    switch (BYTE_TYPE(enc, ptr)) {
582
2.15G
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
583
0
#  ifdef XML_NS
584
26.7M
    case BT_COLON:
585
26.7M
      if (hadColon) {
586
1.47k
        *nextTokPtr = ptr;
587
1.47k
        return XML_TOK_INVALID;
588
1.47k
      }
589
26.7M
      hadColon = 1;
590
26.7M
      ptr += MINBPC(enc);
591
26.7M
      REQUIRE_CHAR(enc, ptr, end);
592
26.7M
      switch (BYTE_TYPE(enc, ptr)) {
593
14.1M
        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
594
2.76k
      default:
595
2.76k
        *nextTokPtr = ptr;
596
2.76k
        return XML_TOK_INVALID;
597
26.7M
      }
598
26.7M
      break;
599
26.7M
#  endif
600
26.7M
    case BT_S:
601
565k
    case BT_CR:
602
1.09M
    case BT_LF:
603
1.39M
      for (;;) {
604
1.39M
        int t;
605
606
1.39M
        ptr += MINBPC(enc);
607
1.39M
        REQUIRE_CHAR(enc, ptr, end);
608
1.38M
        t = BYTE_TYPE(enc, ptr);
609
1.38M
        if (t == BT_EQUALS)
610
1.08M
          break;
611
305k
        switch (t) {
612
17.8k
        case BT_S:
613
46.8k
        case BT_LF:
614
292k
        case BT_CR:
615
292k
          break;
616
12.9k
        default:
617
12.9k
          *nextTokPtr = ptr;
618
12.9k
          return XML_TOK_INVALID;
619
305k
        }
620
305k
      }
621
1.08M
      EXPAT_FALLTHROUGH;
622
152M
    case BT_EQUALS: {
623
152M
      int open;
624
152M
#  ifdef XML_NS
625
152M
      hadColon = 0;
626
152M
#  endif
627
152M
      for (;;) {
628
152M
        ptr += MINBPC(enc);
629
152M
        REQUIRE_CHAR(enc, ptr, end);
630
152M
        open = BYTE_TYPE(enc, ptr);
631
152M
        if (open == BT_QUOT || open == BT_APOS)
632
152M
          break;
633
110k
        switch (open) {
634
72.1k
        case BT_S:
635
81.6k
        case BT_LF:
636
98.9k
        case BT_CR:
637
98.9k
          break;
638
11.2k
        default:
639
11.2k
          *nextTokPtr = ptr;
640
11.2k
          return XML_TOK_INVALID;
641
110k
        }
642
110k
      }
643
152M
      ptr += MINBPC(enc);
644
      /* in attribute value */
645
3.30G
      for (;;) {
646
3.30G
        int t;
647
3.30G
        REQUIRE_CHAR(enc, ptr, end);
648
3.30G
        t = BYTE_TYPE(enc, ptr);
649
3.30G
        if (t == open)
650
152M
          break;
651
3.14G
        switch (t) {
652
865M
          INVALID_CASES(ptr, nextTokPtr)
653
8.26M
        case BT_AMP: {
654
8.26M
          int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
655
8.26M
          if (tok <= 0) {
656
16.9k
            if (tok == XML_TOK_INVALID)
657
11.6k
              *nextTokPtr = ptr;
658
16.9k
            return tok;
659
16.9k
          }
660
8.24M
          break;
661
8.26M
        }
662
8.24M
        case BT_LT:
663
11.5k
          *nextTokPtr = ptr;
664
11.5k
          return XML_TOK_INVALID;
665
2.70G
        default:
666
2.70G
          ptr += MINBPC(enc);
667
2.70G
          break;
668
3.14G
        }
669
3.14G
      }
670
152M
      ptr += MINBPC(enc);
671
152M
      REQUIRE_CHAR(enc, ptr, end);
672
152M
      switch (BYTE_TYPE(enc, ptr)) {
673
76.9M
      case BT_S:
674
108M
      case BT_CR:
675
131M
      case BT_LF:
676
131M
        break;
677
19.9M
      case BT_SOL:
678
19.9M
        goto sol;
679
335k
      case BT_GT:
680
335k
        goto gt;
681
9.20k
      default:
682
9.20k
        *nextTokPtr = ptr;
683
9.20k
        return XML_TOK_INVALID;
684
152M
      }
685
      /* ptr points to closing quote */
686
149M
      for (;;) {
687
149M
        ptr += MINBPC(enc);
688
149M
        REQUIRE_CHAR(enc, ptr, end);
689
149M
        switch (BYTE_TYPE(enc, ptr)) {
690
132M
          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
691
16.8M
        case BT_S:
692
17.7M
        case BT_CR:
693
18.0M
        case BT_LF:
694
18.0M
          continue;
695
15.9k
        case BT_GT:
696
351k
        gt:
697
351k
          *nextTokPtr = ptr + MINBPC(enc);
698
351k
          return XML_TOK_START_TAG_WITH_ATTS;
699
168k
        case BT_SOL:
700
20.1M
        sol:
701
20.1M
          ptr += MINBPC(enc);
702
20.1M
          REQUIRE_CHAR(enc, ptr, end);
703
20.1M
          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
704
2.76k
            *nextTokPtr = ptr;
705
2.76k
            return XML_TOK_INVALID;
706
2.76k
          }
707
20.1M
          *nextTokPtr = ptr + MINBPC(enc);
708
20.1M
          return XML_TOK_EMPTY_ELEMENT_WITH_ATTS;
709
7.96k
        default:
710
7.96k
          *nextTokPtr = ptr;
711
7.96k
          return XML_TOK_INVALID;
712
149M
        }
713
131M
        break;
714
149M
      }
715
131M
      break;
716
131M
    }
717
131M
    default:
718
16.1k
      *nextTokPtr = ptr;
719
16.1k
      return XML_TOK_INVALID;
720
874M
    }
721
874M
  }
722
11.5k
  return XML_TOK_PARTIAL;
723
20.6M
}
xmltok.c:normal_scanAtts
Line
Count
Source
576
20.3M
                 const char **nextTokPtr) {
577
20.3M
#  ifdef XML_NS
578
20.3M
  int hadColon = 0;
579
20.3M
#  endif
580
833M
  while (HAS_CHAR(enc, ptr, end)) {
581
833M
    switch (BYTE_TYPE(enc, ptr)) {
582
2.10G
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
583
0
#  ifdef XML_NS
584
26.7M
    case BT_COLON:
585
26.7M
      if (hadColon) {
586
259
        *nextTokPtr = ptr;
587
259
        return XML_TOK_INVALID;
588
259
      }
589
26.7M
      hadColon = 1;
590
26.7M
      ptr += MINBPC(enc);
591
26.7M
      REQUIRE_CHAR(enc, ptr, end);
592
26.7M
      switch (BYTE_TYPE(enc, ptr)) {
593
14.1M
        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
594
424
      default:
595
424
        *nextTokPtr = ptr;
596
424
        return XML_TOK_INVALID;
597
26.7M
      }
598
26.7M
      break;
599
26.7M
#  endif
600
26.7M
    case BT_S:
601
42.6k
    case BT_CR:
602
316k
    case BT_LF:
603
336k
      for (;;) {
604
336k
        int t;
605
606
336k
        ptr += MINBPC(enc);
607
336k
        REQUIRE_CHAR(enc, ptr, end);
608
335k
        t = BYTE_TYPE(enc, ptr);
609
335k
        if (t == BT_EQUALS)
610
313k
          break;
611
22.6k
        switch (t) {
612
2.72k
        case BT_S:
613
11.6k
        case BT_LF:
614
20.2k
        case BT_CR:
615
20.2k
          break;
616
2.39k
        default:
617
2.39k
          *nextTokPtr = ptr;
618
2.39k
          return XML_TOK_INVALID;
619
22.6k
        }
620
22.6k
      }
621
313k
      EXPAT_FALLTHROUGH;
622
121M
    case BT_EQUALS: {
623
121M
      int open;
624
121M
#  ifdef XML_NS
625
121M
      hadColon = 0;
626
121M
#  endif
627
121M
      for (;;) {
628
121M
        ptr += MINBPC(enc);
629
121M
        REQUIRE_CHAR(enc, ptr, end);
630
121M
        open = BYTE_TYPE(enc, ptr);
631
121M
        if (open == BT_QUOT || open == BT_APOS)
632
121M
          break;
633
20.7k
        switch (open) {
634
5.50k
        case BT_S:
635
8.55k
        case BT_LF:
636
18.3k
        case BT_CR:
637
18.3k
          break;
638
2.38k
        default:
639
2.38k
          *nextTokPtr = ptr;
640
2.38k
          return XML_TOK_INVALID;
641
20.7k
        }
642
20.7k
      }
643
121M
      ptr += MINBPC(enc);
644
      /* in attribute value */
645
827M
      for (;;) {
646
827M
        int t;
647
827M
        REQUIRE_CHAR(enc, ptr, end);
648
827M
        t = BYTE_TYPE(enc, ptr);
649
827M
        if (t == open)
650
121M
          break;
651
705M
        switch (t) {
652
720M
          INVALID_CASES(ptr, nextTokPtr)
653
1.64M
        case BT_AMP: {
654
1.64M
          int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
655
1.64M
          if (tok <= 0) {
656
4.34k
            if (tok == XML_TOK_INVALID)
657
2.90k
              *nextTokPtr = ptr;
658
4.34k
            return tok;
659
4.34k
          }
660
1.64M
          break;
661
1.64M
        }
662
1.64M
        case BT_LT:
663
4.43k
          *nextTokPtr = ptr;
664
4.43k
          return XML_TOK_INVALID;
665
343M
        default:
666
343M
          ptr += MINBPC(enc);
667
343M
          break;
668
705M
        }
669
705M
      }
670
121M
      ptr += MINBPC(enc);
671
121M
      REQUIRE_CHAR(enc, ptr, end);
672
121M
      switch (BYTE_TYPE(enc, ptr)) {
673
71.8M
      case BT_S:
674
100M
      case BT_CR:
675
101M
      case BT_LF:
676
101M
        break;
677
19.9M
      case BT_SOL:
678
19.9M
        goto sol;
679
204k
      case BT_GT:
680
204k
        goto gt;
681
1.25k
      default:
682
1.25k
        *nextTokPtr = ptr;
683
1.25k
        return XML_TOK_INVALID;
684
121M
      }
685
      /* ptr points to closing quote */
686
119M
      for (;;) {
687
119M
        ptr += MINBPC(enc);
688
119M
        REQUIRE_CHAR(enc, ptr, end);
689
119M
        switch (BYTE_TYPE(enc, ptr)) {
690
100M
          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
691
16.6M
        case BT_S:
692
17.5M
        case BT_CR:
693
17.6M
        case BT_LF:
694
17.6M
          continue;
695
7.29k
        case BT_GT:
696
211k
        gt:
697
211k
          *nextTokPtr = ptr + MINBPC(enc);
698
211k
          return XML_TOK_START_TAG_WITH_ATTS;
699
160k
        case BT_SOL:
700
20.1M
        sol:
701
20.1M
          ptr += MINBPC(enc);
702
20.1M
          REQUIRE_CHAR(enc, ptr, end);
703
20.1M
          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
704
690
            *nextTokPtr = ptr;
705
690
            return XML_TOK_INVALID;
706
690
          }
707
20.1M
          *nextTokPtr = ptr + MINBPC(enc);
708
20.1M
          return XML_TOK_EMPTY_ELEMENT_WITH_ATTS;
709
2.33k
        default:
710
2.33k
          *nextTokPtr = ptr;
711
2.33k
          return XML_TOK_INVALID;
712
119M
        }
713
101M
        break;
714
119M
      }
715
101M
      break;
716
101M
    }
717
101M
    default:
718
6.29k
      *nextTokPtr = ptr;
719
6.29k
      return XML_TOK_INVALID;
720
833M
    }
721
833M
  }
722
3.43k
  return XML_TOK_PARTIAL;
723
20.3M
}
xmltok.c:little2_scanAtts
Line
Count
Source
576
142k
                 const char **nextTokPtr) {
577
142k
#  ifdef XML_NS
578
142k
  int hadColon = 0;
579
142k
#  endif
580
9.39M
  while (HAS_CHAR(enc, ptr, end)) {
581
9.39M
    switch (BYTE_TYPE(enc, ptr)) {
582
8.04M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
583
0
#  ifdef XML_NS
584
29.2k
    case BT_COLON:
585
29.2k
      if (hadColon) {
586
1.13k
        *nextTokPtr = ptr;
587
1.13k
        return XML_TOK_INVALID;
588
1.13k
      }
589
28.1k
      hadColon = 1;
590
28.1k
      ptr += MINBPC(enc);
591
28.1k
      REQUIRE_CHAR(enc, ptr, end);
592
27.8k
      switch (BYTE_TYPE(enc, ptr)) {
593
41.9k
        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
594
1.98k
      default:
595
1.98k
        *nextTokPtr = ptr;
596
1.98k
        return XML_TOK_INVALID;
597
27.8k
      }
598
24.1k
      break;
599
24.1k
#  endif
600
245k
    case BT_S:
601
466k
    case BT_CR:
602
485k
    case BT_LF:
603
503k
      for (;;) {
604
503k
        int t;
605
606
503k
        ptr += MINBPC(enc);
607
503k
        REQUIRE_CHAR(enc, ptr, end);
608
502k
        t = BYTE_TYPE(enc, ptr);
609
502k
        if (t == BT_EQUALS)
610
478k
          break;
611
24.3k
        switch (t) {
612
2.62k
        case BT_S:
613
10.6k
        case BT_LF:
614
18.3k
        case BT_CR:
615
18.3k
          break;
616
6.03k
        default:
617
6.03k
          *nextTokPtr = ptr;
618
6.03k
          return XML_TOK_INVALID;
619
24.3k
        }
620
24.3k
      }
621
478k
      EXPAT_FALLTHROUGH;
622
7.78M
    case BT_EQUALS: {
623
7.78M
      int open;
624
7.78M
#  ifdef XML_NS
625
7.78M
      hadColon = 0;
626
7.78M
#  endif
627
7.85M
      for (;;) {
628
7.85M
        ptr += MINBPC(enc);
629
7.85M
        REQUIRE_CHAR(enc, ptr, end);
630
7.84M
        open = BYTE_TYPE(enc, ptr);
631
7.84M
        if (open == BT_QUOT || open == BT_APOS)
632
7.77M
          break;
633
74.3k
        switch (open) {
634
62.8k
        case BT_S:
635
66.0k
        case BT_LF:
636
70.0k
        case BT_CR:
637
70.0k
          break;
638
4.32k
        default:
639
4.32k
          *nextTokPtr = ptr;
640
4.32k
          return XML_TOK_INVALID;
641
74.3k
        }
642
74.3k
      }
643
7.77M
      ptr += MINBPC(enc);
644
      /* in attribute value */
645
921M
      for (;;) {
646
921M
        int t;
647
921M
        REQUIRE_CHAR(enc, ptr, end);
648
921M
        t = BYTE_TYPE(enc, ptr);
649
921M
        if (t == open)
650
7.74M
          break;
651
913M
        switch (t) {
652
52.6M
          INVALID_CASES(ptr, nextTokPtr)
653
2.41M
        case BT_AMP: {
654
2.41M
          int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
655
2.41M
          if (tok <= 0) {
656
5.97k
            if (tok == XML_TOK_INVALID)
657
4.50k
              *nextTokPtr = ptr;
658
5.97k
            return tok;
659
5.97k
          }
660
2.40M
          break;
661
2.41M
        }
662
2.40M
        case BT_LT:
663
3.95k
          *nextTokPtr = ptr;
664
3.95k
          return XML_TOK_INVALID;
665
885M
        default:
666
885M
          ptr += MINBPC(enc);
667
885M
          break;
668
913M
        }
669
913M
      }
670
7.74M
      ptr += MINBPC(enc);
671
7.74M
      REQUIRE_CHAR(enc, ptr, end);
672
7.74M
      switch (BYTE_TYPE(enc, ptr)) {
673
4.80M
      case BT_S:
674
7.33M
      case BT_CR:
675
7.67M
      case BT_LF:
676
7.67M
        break;
677
6.40k
      case BT_SOL:
678
6.40k
        goto sol;
679
55.8k
      case BT_GT:
680
55.8k
        goto gt;
681
4.00k
      default:
682
4.00k
        *nextTokPtr = ptr;
683
4.00k
        return XML_TOK_INVALID;
684
7.74M
      }
685
      /* ptr points to closing quote */
686
7.79M
      for (;;) {
687
7.79M
        ptr += MINBPC(enc);
688
7.79M
        REQUIRE_CHAR(enc, ptr, end);
689
7.79M
        switch (BYTE_TYPE(enc, ptr)) {
690
11.4M
          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
691
84.6k
        case BT_S:
692
91.9k
        case BT_CR:
693
111k
        case BT_LF:
694
111k
          continue;
695
4.54k
        case BT_GT:
696
60.3k
        gt:
697
60.3k
          *nextTokPtr = ptr + MINBPC(enc);
698
60.3k
          return XML_TOK_START_TAG_WITH_ATTS;
699
4.04k
        case BT_SOL:
700
10.4k
        sol:
701
10.4k
          ptr += MINBPC(enc);
702
10.4k
          REQUIRE_CHAR(enc, ptr, end);
703
9.64k
          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
704
1.07k
            *nextTokPtr = ptr;
705
1.07k
            return XML_TOK_INVALID;
706
1.07k
          }
707
8.57k
          *nextTokPtr = ptr + MINBPC(enc);
708
8.57k
          return XML_TOK_EMPTY_ELEMENT_WITH_ATTS;
709
2.97k
        default:
710
2.97k
          *nextTokPtr = ptr;
711
2.97k
          return XML_TOK_INVALID;
712
7.79M
        }
713
7.66M
        break;
714
7.79M
      }
715
7.66M
      break;
716
7.67M
    }
717
7.66M
    default:
718
4.98k
      *nextTokPtr = ptr;
719
4.98k
      return XML_TOK_INVALID;
720
9.39M
    }
721
9.39M
  }
722
3.30k
  return XML_TOK_PARTIAL;
723
142k
}
xmltok.c:big2_scanAtts
Line
Count
Source
576
162k
                 const char **nextTokPtr) {
577
162k
#  ifdef XML_NS
578
162k
  int hadColon = 0;
579
162k
#  endif
580
31.1M
  while (HAS_CHAR(enc, ptr, end)) {
581
31.1M
    switch (BYTE_TYPE(enc, ptr)) {
582
44.4M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
583
0
#  ifdef XML_NS
584
16.3k
    case BT_COLON:
585
16.3k
      if (hadColon) {
586
86
        *nextTokPtr = ptr;
587
86
        return XML_TOK_INVALID;
588
86
      }
589
16.2k
      hadColon = 1;
590
16.2k
      ptr += MINBPC(enc);
591
16.2k
      REQUIRE_CHAR(enc, ptr, end);
592
15.9k
      switch (BYTE_TYPE(enc, ptr)) {
593
21.4k
        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
594
361
      default:
595
361
        *nextTokPtr = ptr;
596
361
        return XML_TOK_INVALID;
597
15.9k
      }
598
14.5k
      break;
599
14.5k
#  endif
600
25.2k
    case BT_S:
601
56.1k
    case BT_CR:
602
296k
    case BT_LF:
603
550k
      for (;;) {
604
550k
        int t;
605
606
550k
        ptr += MINBPC(enc);
607
550k
        REQUIRE_CHAR(enc, ptr, end);
608
547k
        t = BYTE_TYPE(enc, ptr);
609
547k
        if (t == BT_EQUALS)
610
289k
          break;
611
258k
        switch (t) {
612
12.4k
        case BT_S:
613
24.5k
        case BT_LF:
614
253k
        case BT_CR:
615
253k
          break;
616
4.55k
        default:
617
4.55k
          *nextTokPtr = ptr;
618
4.55k
          return XML_TOK_INVALID;
619
258k
        }
620
258k
      }
621
289k
      EXPAT_FALLTHROUGH;
622
22.9M
    case BT_EQUALS: {
623
22.9M
      int open;
624
22.9M
#  ifdef XML_NS
625
22.9M
      hadColon = 0;
626
22.9M
#  endif
627
22.9M
      for (;;) {
628
22.9M
        ptr += MINBPC(enc);
629
22.9M
        REQUIRE_CHAR(enc, ptr, end);
630
22.9M
        open = BYTE_TYPE(enc, ptr);
631
22.9M
        if (open == BT_QUOT || open == BT_APOS)
632
22.8M
          break;
633
15.0k
        switch (open) {
634
3.85k
        case BT_S:
635
7.02k
        case BT_LF:
636
10.5k
        case BT_CR:
637
10.5k
          break;
638
4.53k
        default:
639
4.53k
          *nextTokPtr = ptr;
640
4.53k
          return XML_TOK_INVALID;
641
15.0k
        }
642
15.0k
      }
643
22.8M
      ptr += MINBPC(enc);
644
      /* in attribute value */
645
1.55G
      for (;;) {
646
1.55G
        int t;
647
1.55G
        REQUIRE_CHAR(enc, ptr, end);
648
1.55G
        t = BYTE_TYPE(enc, ptr);
649
1.55G
        if (t == open)
650
22.8M
          break;
651
1.52G
        switch (t) {
652
91.9M
          INVALID_CASES(ptr, nextTokPtr)
653
4.20M
        case BT_AMP: {
654
4.20M
          int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
655
4.20M
          if (tok <= 0) {
656
6.61k
            if (tok == XML_TOK_INVALID)
657
4.25k
              *nextTokPtr = ptr;
658
6.61k
            return tok;
659
6.61k
          }
660
4.19M
          break;
661
4.20M
        }
662
4.19M
        case BT_LT:
663
3.11k
          *nextTokPtr = ptr;
664
3.11k
          return XML_TOK_INVALID;
665
1.47G
        default:
666
1.47G
          ptr += MINBPC(enc);
667
1.47G
          break;
668
1.52G
        }
669
1.52G
      }
670
22.8M
      ptr += MINBPC(enc);
671
22.8M
      REQUIRE_CHAR(enc, ptr, end);
672
22.8M
      switch (BYTE_TYPE(enc, ptr)) {
673
243k
      case BT_S:
674
519k
      case BT_CR:
675
22.7M
      case BT_LF:
676
22.7M
        break;
677
6.88k
      case BT_SOL:
678
6.88k
        goto sol;
679
75.9k
      case BT_GT:
680
75.9k
        goto gt;
681
3.95k
      default:
682
3.95k
        *nextTokPtr = ptr;
683
3.95k
        return XML_TOK_INVALID;
684
22.8M
      }
685
      /* ptr points to closing quote */
686
23.0M
      for (;;) {
687
23.0M
        ptr += MINBPC(enc);
688
23.0M
        REQUIRE_CHAR(enc, ptr, end);
689
23.0M
        switch (BYTE_TYPE(enc, ptr)) {
690
20.7M
          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
691
34.1k
        case BT_S:
692
66.7k
        case BT_CR:
693
289k
        case BT_LF:
694
289k
          continue;
695
4.11k
        case BT_GT:
696
80.0k
        gt:
697
80.0k
          *nextTokPtr = ptr + MINBPC(enc);
698
80.0k
          return XML_TOK_START_TAG_WITH_ATTS;
699
4.56k
        case BT_SOL:
700
11.4k
        sol:
701
11.4k
          ptr += MINBPC(enc);
702
11.4k
          REQUIRE_CHAR(enc, ptr, end);
703
10.7k
          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
704
1.00k
            *nextTokPtr = ptr;
705
1.00k
            return XML_TOK_INVALID;
706
1.00k
          }
707
9.73k
          *nextTokPtr = ptr + MINBPC(enc);
708
9.73k
          return XML_TOK_EMPTY_ELEMENT_WITH_ATTS;
709
2.64k
        default:
710
2.64k
          *nextTokPtr = ptr;
711
2.64k
          return XML_TOK_INVALID;
712
23.0M
        }
713
22.7M
        break;
714
23.0M
      }
715
22.7M
      break;
716
22.7M
    }
717
22.7M
    default:
718
4.84k
      *nextTokPtr = ptr;
719
4.84k
      return XML_TOK_INVALID;
720
31.1M
    }
721
31.1M
  }
722
4.81k
  return XML_TOK_PARTIAL;
723
162k
}
724
725
/* ptr points to character following "<" */
726
727
static int PTRCALL
728
PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
729
261M
               const char **nextTokPtr) {
730
261M
#  ifdef XML_NS
731
261M
  int hadColon;
732
261M
#  endif
733
261M
  REQUIRE_CHAR(enc, ptr, end);
734
261M
  switch (BYTE_TYPE(enc, ptr)) {
735
155M
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
736
7.94M
  case BT_EXCL:
737
7.94M
    ptr += MINBPC(enc);
738
7.94M
    REQUIRE_CHAR(enc, ptr, end);
739
7.94M
    switch (BYTE_TYPE(enc, ptr)) {
740
46.3k
    case BT_MINUS:
741
46.3k
      return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
742
7.68M
    case BT_LSQB:
743
7.68M
      return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
744
7.94M
    }
745
213k
    *nextTokPtr = ptr;
746
213k
    return XML_TOK_INVALID;
747
355k
  case BT_QUEST:
748
355k
    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
749
757k
  case BT_SOL:
750
757k
    return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
751
7.14k
  default:
752
7.14k
    *nextTokPtr = ptr;
753
7.14k
    return XML_TOK_INVALID;
754
261M
  }
755
252M
#  ifdef XML_NS
756
252M
  hadColon = 0;
757
252M
#  endif
758
  /* we have a start-tag */
759
440M
  while (HAS_CHAR(enc, ptr, end)) {
760
440M
    switch (BYTE_TYPE(enc, ptr)) {
761
709M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
762
0
#  ifdef XML_NS
763
133k
    case BT_COLON:
764
133k
      if (hadColon) {
765
536
        *nextTokPtr = ptr;
766
536
        return XML_TOK_INVALID;
767
536
      }
768
132k
      hadColon = 1;
769
132k
      ptr += MINBPC(enc);
770
132k
      REQUIRE_CHAR(enc, ptr, end);
771
132k
      switch (BYTE_TYPE(enc, ptr)) {
772
215k
        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
773
1.89k
      default:
774
1.89k
        *nextTokPtr = ptr;
775
1.89k
        return XML_TOK_INVALID;
776
132k
      }
777
127k
      break;
778
127k
#  endif
779
24.1M
    case BT_S:
780
24.2M
    case BT_CR:
781
24.8M
    case BT_LF: {
782
24.8M
      ptr += MINBPC(enc);
783
26.0M
      while (HAS_CHAR(enc, ptr, end)) {
784
26.0M
        switch (BYTE_TYPE(enc, ptr)) {
785
4.36M
          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
786
743k
        case BT_GT:
787
743k
          goto gt;
788
3.43M
        case BT_SOL:
789
3.43M
          goto sol;
790
69.6k
        case BT_S:
791
93.6k
        case BT_CR:
792
1.17M
        case BT_LF:
793
1.17M
          ptr += MINBPC(enc);
794
1.17M
          continue;
795
10.0k
        default:
796
10.0k
          *nextTokPtr = ptr;
797
10.0k
          return XML_TOK_INVALID;
798
26.0M
        }
799
20.6M
        return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr);
800
26.0M
      }
801
4.92k
      return XML_TOK_PARTIAL;
802
24.8M
    }
803
227M
    case BT_GT:
804
228M
    gt:
805
228M
      *nextTokPtr = ptr + MINBPC(enc);
806
228M
      return XML_TOK_START_TAG_NO_ATTS;
807
370k
    case BT_SOL:
808
3.80M
    sol:
809
3.80M
      ptr += MINBPC(enc);
810
3.80M
      REQUIRE_CHAR(enc, ptr, end);
811
3.80M
      if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
812
2.87k
        *nextTokPtr = ptr;
813
2.87k
        return XML_TOK_INVALID;
814
2.87k
      }
815
3.79M
      *nextTokPtr = ptr + MINBPC(enc);
816
3.79M
      return XML_TOK_EMPTY_ELEMENT_NO_ATTS;
817
16.1k
    default:
818
16.1k
      *nextTokPtr = ptr;
819
16.1k
      return XML_TOK_INVALID;
820
440M
    }
821
440M
  }
822
10.6k
  return XML_TOK_PARTIAL;
823
252M
}
xmltok.c:normal_scanLt
Line
Count
Source
729
260M
               const char **nextTokPtr) {
730
260M
#  ifdef XML_NS
731
260M
  int hadColon;
732
260M
#  endif
733
260M
  REQUIRE_CHAR(enc, ptr, end);
734
260M
  switch (BYTE_TYPE(enc, ptr)) {
735
154M
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
736
7.76M
  case BT_EXCL:
737
7.76M
    ptr += MINBPC(enc);
738
7.76M
    REQUIRE_CHAR(enc, ptr, end);
739
7.76M
    switch (BYTE_TYPE(enc, ptr)) {
740
23.4k
    case BT_MINUS:
741
23.4k
      return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
742
7.62M
    case BT_LSQB:
743
7.62M
      return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
744
7.76M
    }
745
120k
    *nextTokPtr = ptr;
746
120k
    return XML_TOK_INVALID;
747
276k
  case BT_QUEST:
748
276k
    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
749
697k
  case BT_SOL:
750
697k
    return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
751
4.00k
  default:
752
4.00k
    *nextTokPtr = ptr;
753
4.00k
    return XML_TOK_INVALID;
754
260M
  }
755
252M
#  ifdef XML_NS
756
252M
  hadColon = 0;
757
252M
#  endif
758
  /* we have a start-tag */
759
433M
  while (HAS_CHAR(enc, ptr, end)) {
760
433M
    switch (BYTE_TYPE(enc, ptr)) {
761
674M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
762
0
#  ifdef XML_NS
763
111k
    case BT_COLON:
764
111k
      if (hadColon) {
765
222
        *nextTokPtr = ptr;
766
222
        return XML_TOK_INVALID;
767
222
      }
768
111k
      hadColon = 1;
769
111k
      ptr += MINBPC(enc);
770
111k
      REQUIRE_CHAR(enc, ptr, end);
771
111k
      switch (BYTE_TYPE(enc, ptr)) {
772
187k
        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
773
818
      default:
774
818
        *nextTokPtr = ptr;
775
818
        return XML_TOK_INVALID;
776
111k
      }
777
108k
      break;
778
108k
#  endif
779
23.9M
    case BT_S:
780
23.9M
    case BT_CR:
781
24.5M
    case BT_LF: {
782
24.5M
      ptr += MINBPC(enc);
783
25.6M
      while (HAS_CHAR(enc, ptr, end)) {
784
25.6M
        switch (BYTE_TYPE(enc, ptr)) {
785
3.83M
          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
786
719k
        case BT_GT:
787
719k
          goto gt;
788
3.42M
        case BT_SOL:
789
3.42M
          goto sol;
790
49.0k
        case BT_S:
791
58.1k
        case BT_CR:
792
1.12M
        case BT_LF:
793
1.12M
          ptr += MINBPC(enc);
794
1.12M
          continue;
795
2.84k
        default:
796
2.84k
          *nextTokPtr = ptr;
797
2.84k
          return XML_TOK_INVALID;
798
25.6M
        }
799
20.3M
        return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr);
800
25.6M
      }
801
1.14k
      return XML_TOK_PARTIAL;
802
24.5M
    }
803
227M
    case BT_GT:
804
227M
    gt:
805
227M
      *nextTokPtr = ptr + MINBPC(enc);
806
227M
      return XML_TOK_START_TAG_NO_ATTS;
807
341k
    case BT_SOL:
808
3.76M
    sol:
809
3.76M
      ptr += MINBPC(enc);
810
3.76M
      REQUIRE_CHAR(enc, ptr, end);
811
3.76M
      if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
812
558
        *nextTokPtr = ptr;
813
558
        return XML_TOK_INVALID;
814
558
      }
815
3.76M
      *nextTokPtr = ptr + MINBPC(enc);
816
3.76M
      return XML_TOK_EMPTY_ELEMENT_NO_ATTS;
817
6.62k
    default:
818
6.62k
      *nextTokPtr = ptr;
819
6.62k
      return XML_TOK_INVALID;
820
433M
    }
821
433M
  }
822
4.24k
  return XML_TOK_PARTIAL;
823
252M
}
xmltok.c:little2_scanLt
Line
Count
Source
729
516k
               const char **nextTokPtr) {
730
516k
#  ifdef XML_NS
731
516k
  int hadColon;
732
516k
#  endif
733
516k
  REQUIRE_CHAR(enc, ptr, end);
734
516k
  switch (BYTE_TYPE(enc, ptr)) {
735
638k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
736
90.5k
  case BT_EXCL:
737
90.5k
    ptr += MINBPC(enc);
738
90.5k
    REQUIRE_CHAR(enc, ptr, end);
739
90.3k
    switch (BYTE_TYPE(enc, ptr)) {
740
10.9k
    case BT_MINUS:
741
10.9k
      return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
742
33.8k
    case BT_LSQB:
743
33.8k
      return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
744
90.3k
    }
745
45.5k
    *nextTokPtr = ptr;
746
45.5k
    return XML_TOK_INVALID;
747
40.1k
  case BT_QUEST:
748
40.1k
    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
749
27.6k
  case BT_SOL:
750
27.6k
    return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
751
850
  default:
752
850
    *nextTokPtr = ptr;
753
850
    return XML_TOK_INVALID;
754
516k
  }
755
352k
#  ifdef XML_NS
756
352k
  hadColon = 0;
757
352k
#  endif
758
  /* we have a start-tag */
759
1.00M
  while (HAS_CHAR(enc, ptr, end)) {
760
1.00M
    switch (BYTE_TYPE(enc, ptr)) {
761
3.51M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
762
0
#  ifdef XML_NS
763
11.0k
    case BT_COLON:
764
11.0k
      if (hadColon) {
765
87
        *nextTokPtr = ptr;
766
87
        return XML_TOK_INVALID;
767
87
      }
768
10.9k
      hadColon = 1;
769
10.9k
      ptr += MINBPC(enc);
770
10.9k
      REQUIRE_CHAR(enc, ptr, end);
771
10.9k
      switch (BYTE_TYPE(enc, ptr)) {
772
15.1k
        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
773
386
      default:
774
386
        *nextTokPtr = ptr;
775
386
        return XML_TOK_INVALID;
776
10.9k
      }
777
9.86k
      break;
778
9.86k
#  endif
779
106k
    case BT_S:
780
136k
    case BT_CR:
781
166k
    case BT_LF: {
782
166k
      ptr += MINBPC(enc);
783
187k
      while (HAS_CHAR(enc, ptr, end)) {
784
187k
        switch (BYTE_TYPE(enc, ptr)) {
785
264k
          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
786
12.2k
        case BT_GT:
787
12.2k
          goto gt;
788
3.83k
        case BT_SOL:
789
3.83k
          goto sol;
790
7.79k
        case BT_S:
791
15.2k
        case BT_CR:
792
22.2k
        case BT_LF:
793
22.2k
          ptr += MINBPC(enc);
794
22.2k
          continue;
795
3.48k
        default:
796
3.48k
          *nextTokPtr = ptr;
797
3.48k
          return XML_TOK_INVALID;
798
187k
        }
799
142k
        return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr);
800
187k
      }
801
1.47k
      return XML_TOK_PARTIAL;
802
166k
    }
803
158k
    case BT_GT:
804
171k
    gt:
805
171k
      *nextTokPtr = ptr + MINBPC(enc);
806
171k
      return XML_TOK_START_TAG_NO_ATTS;
807
13.8k
    case BT_SOL:
808
17.7k
    sol:
809
17.7k
      ptr += MINBPC(enc);
810
17.7k
      REQUIRE_CHAR(enc, ptr, end);
811
16.9k
      if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
812
1.08k
        *nextTokPtr = ptr;
813
1.08k
        return XML_TOK_INVALID;
814
1.08k
      }
815
15.8k
      *nextTokPtr = ptr + MINBPC(enc);
816
15.8k
      return XML_TOK_EMPTY_ELEMENT_NO_ATTS;
817
3.96k
    default:
818
3.96k
      *nextTokPtr = ptr;
819
3.96k
      return XML_TOK_INVALID;
820
1.00M
    }
821
1.00M
  }
822
2.56k
  return XML_TOK_PARTIAL;
823
352k
}
xmltok.c:big2_scanLt
Line
Count
Source
729
567k
               const char **nextTokPtr) {
730
567k
#  ifdef XML_NS
731
567k
  int hadColon;
732
567k
#  endif
733
567k
  REQUIRE_CHAR(enc, ptr, end);
734
566k
  switch (BYTE_TYPE(enc, ptr)) {
735
681k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
736
91.5k
  case BT_EXCL:
737
91.5k
    ptr += MINBPC(enc);
738
91.5k
    REQUIRE_CHAR(enc, ptr, end);
739
90.8k
    switch (BYTE_TYPE(enc, ptr)) {
740
11.9k
    case BT_MINUS:
741
11.9k
      return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
742
31.5k
    case BT_LSQB:
743
31.5k
      return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
744
90.8k
    }
745
47.4k
    *nextTokPtr = ptr;
746
47.4k
    return XML_TOK_INVALID;
747
39.5k
  case BT_QUEST:
748
39.5k
    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
749
32.4k
  case BT_SOL:
750
32.4k
    return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
751
2.29k
  default:
752
2.29k
    *nextTokPtr = ptr;
753
2.29k
    return XML_TOK_INVALID;
754
566k
  }
755
397k
#  ifdef XML_NS
756
397k
  hadColon = 0;
757
397k
#  endif
758
  /* we have a start-tag */
759
5.82M
  while (HAS_CHAR(enc, ptr, end)) {
760
5.82M
    switch (BYTE_TYPE(enc, ptr)) {
761
32.2M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
762
0
#  ifdef XML_NS
763
10.9k
    case BT_COLON:
764
10.9k
      if (hadColon) {
765
227
        *nextTokPtr = ptr;
766
227
        return XML_TOK_INVALID;
767
227
      }
768
10.6k
      hadColon = 1;
769
10.6k
      ptr += MINBPC(enc);
770
10.6k
      REQUIRE_CHAR(enc, ptr, end);
771
10.4k
      switch (BYTE_TYPE(enc, ptr)) {
772
12.6k
        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
773
692
      default:
774
692
        *nextTokPtr = ptr;
775
692
        return XML_TOK_INVALID;
776
10.4k
      }
777
9.01k
      break;
778
9.01k
#  endif
779
108k
    case BT_S:
780
151k
    case BT_CR:
781
187k
    case BT_LF: {
782
187k
      ptr += MINBPC(enc);
783
212k
      while (HAS_CHAR(enc, ptr, end)) {
784
212k
        switch (BYTE_TYPE(enc, ptr)) {
785
263k
          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
786
11.5k
        case BT_GT:
787
11.5k
          goto gt;
788
3.47k
        case BT_SOL:
789
3.47k
          goto sol;
790
12.7k
        case BT_S:
791
20.2k
        case BT_CR:
792
27.7k
        case BT_LF:
793
27.7k
          ptr += MINBPC(enc);
794
27.7k
          continue;
795
3.74k
        default:
796
3.74k
          *nextTokPtr = ptr;
797
3.74k
          return XML_TOK_INVALID;
798
212k
        }
799
162k
        return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr);
800
212k
      }
801
2.29k
      return XML_TOK_PARTIAL;
802
187k
    }
803
178k
    case BT_GT:
804
189k
    gt:
805
189k
      *nextTokPtr = ptr + MINBPC(enc);
806
189k
      return XML_TOK_START_TAG_NO_ATTS;
807
14.9k
    case BT_SOL:
808
18.4k
    sol:
809
18.4k
      ptr += MINBPC(enc);
810
18.4k
      REQUIRE_CHAR(enc, ptr, end);
811
17.8k
      if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
812
1.23k
        *nextTokPtr = ptr;
813
1.23k
        return XML_TOK_INVALID;
814
1.23k
      }
815
16.6k
      *nextTokPtr = ptr + MINBPC(enc);
816
16.6k
      return XML_TOK_EMPTY_ELEMENT_NO_ATTS;
817
5.55k
    default:
818
5.55k
      *nextTokPtr = ptr;
819
5.55k
      return XML_TOK_INVALID;
820
5.82M
    }
821
5.82M
  }
822
3.87k
  return XML_TOK_PARTIAL;
823
397k
}
824
825
static int PTRCALL
826
PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
827
455M
                   const char **nextTokPtr) {
828
455M
  if (ptr >= end)
829
23.0M
    return XML_TOK_NONE;
830
432M
  if (MINBPC(enc) > 1) {
831
2.75M
    size_t n = end - ptr;
832
2.75M
    if (n & (MINBPC(enc) - 1)) {
833
594k
      n &= ~(MINBPC(enc) - 1);
834
594k
      if (n == 0)
835
15.0k
        return XML_TOK_PARTIAL;
836
579k
      end = ptr + n;
837
579k
    }
838
2.75M
  }
839
432M
  switch (BYTE_TYPE(enc, ptr)) {
840
261M
  case BT_LT:
841
261M
    return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
842
37.6M
  case BT_AMP:
843
37.6M
    return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
844
7.51M
  case BT_CR:
845
7.51M
    ptr += MINBPC(enc);
846
7.51M
    if (! HAS_CHAR(enc, ptr, end))
847
6.53k
      return XML_TOK_TRAILING_CR;
848
7.51M
    if (BYTE_TYPE(enc, ptr) == BT_LF)
849
117k
      ptr += MINBPC(enc);
850
7.51M
    *nextTokPtr = ptr;
851
7.51M
    return XML_TOK_DATA_NEWLINE;
852
32.9M
  case BT_LF:
853
32.9M
    *nextTokPtr = ptr + MINBPC(enc);
854
32.9M
    return XML_TOK_DATA_NEWLINE;
855
1.82M
  case BT_RSQB:
856
1.82M
    ptr += MINBPC(enc);
857
1.82M
    if (! HAS_CHAR(enc, ptr, end))
858
11.6k
      return XML_TOK_TRAILING_RSQB;
859
1.81M
    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
860
1.52M
      break;
861
282k
    ptr += MINBPC(enc);
862
282k
    if (! HAS_CHAR(enc, ptr, end))
863
28.7k
      return XML_TOK_TRAILING_RSQB;
864
253k
    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
865
253k
      ptr -= MINBPC(enc);
866
253k
      break;
867
253k
    }
868
546
    *nextTokPtr = ptr;
869
546
    return XML_TOK_INVALID;
870
11.1M
    INVALID_CASES(ptr, nextTokPtr)
871
84.4M
  default:
872
84.4M
    ptr += MINBPC(enc);
873
84.4M
    break;
874
432M
  }
875
3.80G
  while (HAS_CHAR(enc, ptr, end)) {
876
3.80G
    switch (BYTE_TYPE(enc, ptr)) {
877
0
#  define LEAD_CASE(n)                                                         \
878
1.62G
  case BT_LEAD##n:                                                             \
879
1.62G
    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
880
22.1k
      *nextTokPtr = ptr;                                                       \
881
22.1k
      return XML_TOK_DATA_CHARS;                                               \
882
22.1k
    }                                                                          \
883
1.62G
    ptr += n;                                                                  \
884
1.62G
    break;
885
792M
      LEAD_CASE(2)
886
807M
      LEAD_CASE(3)
887
26.4M
      LEAD_CASE(4)
888
0
#  undef LEAD_CASE
889
8.47M
    case BT_RSQB:
890
8.47M
      if (HAS_CHARS(enc, ptr, end, 2)) {
891
8.46M
        if (! CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) {
892
7.33M
          ptr += MINBPC(enc);
893
7.33M
          break;
894
7.33M
        }
895
1.13M
        if (HAS_CHARS(enc, ptr, end, 3)) {
896
1.10M
          if (! CHAR_MATCHES(enc, ptr + 2 * MINBPC(enc), ASCII_GT)) {
897
1.10M
            ptr += MINBPC(enc);
898
1.10M
            break;
899
1.10M
          }
900
1.02k
          *nextTokPtr = ptr + 2 * MINBPC(enc);
901
1.02k
          return XML_TOK_INVALID;
902
1.10M
        }
903
1.13M
      }
904
35.5k
      EXPAT_FALLTHROUGH;
905
6.15M
    case BT_AMP:
906
52.6M
    case BT_LT:
907
52.6M
    case BT_NONXML:
908
52.7M
    case BT_MALFORM:
909
52.7M
    case BT_TRAIL:
910
53.4M
    case BT_CR:
911
68.9M
    case BT_LF:
912
68.9M
      *nextTokPtr = ptr;
913
68.9M
      return XML_TOK_DATA_CHARS;
914
2.09G
    default:
915
2.09G
      ptr += MINBPC(enc);
916
2.09G
      break;
917
3.80G
    }
918
3.80G
  }
919
22.8M
  *nextTokPtr = ptr;
920
22.8M
  return XML_TOK_DATA_CHARS;
921
91.8M
}
xmltok.c:normal_contentTok
Line
Count
Source
827
452M
                   const char **nextTokPtr) {
828
452M
  if (ptr >= end)
829
22.9M
    return XML_TOK_NONE;
830
429M
  if (MINBPC(enc) > 1) {
831
0
    size_t n = end - ptr;
832
0
    if (n & (MINBPC(enc) - 1)) {
833
0
      n &= ~(MINBPC(enc) - 1);
834
0
      if (n == 0)
835
0
        return XML_TOK_PARTIAL;
836
0
      end = ptr + n;
837
0
    }
838
0
  }
839
429M
  switch (BYTE_TYPE(enc, ptr)) {
840
260M
  case BT_LT:
841
260M
    return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
842
37.3M
  case BT_AMP:
843
37.3M
    return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
844
7.17M
  case BT_CR:
845
7.17M
    ptr += MINBPC(enc);
846
7.17M
    if (! HAS_CHAR(enc, ptr, end))
847
3.27k
      return XML_TOK_TRAILING_CR;
848
7.17M
    if (BYTE_TYPE(enc, ptr) == BT_LF)
849
78.8k
      ptr += MINBPC(enc);
850
7.17M
    *nextTokPtr = ptr;
851
7.17M
    return XML_TOK_DATA_NEWLINE;
852
32.8M
  case BT_LF:
853
32.8M
    *nextTokPtr = ptr + MINBPC(enc);
854
32.8M
    return XML_TOK_DATA_NEWLINE;
855
1.71M
  case BT_RSQB:
856
1.71M
    ptr += MINBPC(enc);
857
1.71M
    if (! HAS_CHAR(enc, ptr, end))
858
9.17k
      return XML_TOK_TRAILING_RSQB;
859
1.70M
    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
860
1.46M
      break;
861
246k
    ptr += MINBPC(enc);
862
246k
    if (! HAS_CHAR(enc, ptr, end))
863
25.6k
      return XML_TOK_TRAILING_RSQB;
864
220k
    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
865
220k
      ptr -= MINBPC(enc);
866
220k
      break;
867
220k
    }
868
130
    *nextTokPtr = ptr;
869
130
    return XML_TOK_INVALID;
870
11.0M
    INVALID_CASES(ptr, nextTokPtr)
871
83.8M
  default:
872
83.8M
    ptr += MINBPC(enc);
873
83.8M
    break;
874
429M
  }
875
3.74G
  while (HAS_CHAR(enc, ptr, end)) {
876
3.74G
    switch (BYTE_TYPE(enc, ptr)) {
877
0
#  define LEAD_CASE(n)                                                         \
878
0
  case BT_LEAD##n:                                                             \
879
0
    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
880
0
      *nextTokPtr = ptr;                                                       \
881
0
      return XML_TOK_DATA_CHARS;                                               \
882
0
    }                                                                          \
883
0
    ptr += n;                                                                  \
884
0
    break;
885
792M
      LEAD_CASE(2)
886
807M
      LEAD_CASE(3)
887
24.9M
      LEAD_CASE(4)
888
0
#  undef LEAD_CASE
889
8.32M
    case BT_RSQB:
890
8.32M
      if (HAS_CHARS(enc, ptr, end, 2)) {
891
8.31M
        if (! CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) {
892
7.22M
          ptr += MINBPC(enc);
893
7.22M
          break;
894
7.22M
        }
895
1.08M
        if (HAS_CHARS(enc, ptr, end, 3)) {
896
1.06M
          if (! CHAR_MATCHES(enc, ptr + 2 * MINBPC(enc), ASCII_GT)) {
897
1.06M
            ptr += MINBPC(enc);
898
1.06M
            break;
899
1.06M
          }
900
299
          *nextTokPtr = ptr + 2 * MINBPC(enc);
901
299
          return XML_TOK_INVALID;
902
1.06M
        }
903
1.08M
      }
904
31.6k
      EXPAT_FALLTHROUGH;
905
6.00M
    case BT_AMP:
906
52.2M
    case BT_LT:
907
52.3M
    case BT_NONXML:
908
52.3M
    case BT_MALFORM:
909
52.3M
    case BT_TRAIL:
910
52.8M
    case BT_CR:
911
68.2M
    case BT_LF:
912
68.2M
      *nextTokPtr = ptr;
913
68.2M
      return XML_TOK_DATA_CHARS;
914
2.04G
    default:
915
2.04G
      ptr += MINBPC(enc);
916
2.04G
      break;
917
3.74G
    }
918
3.74G
  }
919
22.7M
  *nextTokPtr = ptr;
920
22.7M
  return XML_TOK_DATA_CHARS;
921
91.0M
}
xmltok.c:little2_contentTok
Line
Count
Source
827
1.27M
                   const char **nextTokPtr) {
828
1.27M
  if (ptr >= end)
829
52.3k
    return XML_TOK_NONE;
830
1.22M
  if (MINBPC(enc) > 1) {
831
1.22M
    size_t n = end - ptr;
832
1.22M
    if (n & (MINBPC(enc) - 1)) {
833
202k
      n &= ~(MINBPC(enc) - 1);
834
202k
      if (n == 0)
835
7.36k
        return XML_TOK_PARTIAL;
836
194k
      end = ptr + n;
837
194k
    }
838
1.22M
  }
839
1.22M
  switch (BYTE_TYPE(enc, ptr)) {
840
516k
  case BT_LT:
841
516k
    return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
842
160k
  case BT_AMP:
843
160k
    return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
844
137k
  case BT_CR:
845
137k
    ptr += MINBPC(enc);
846
137k
    if (! HAS_CHAR(enc, ptr, end))
847
1.28k
      return XML_TOK_TRAILING_CR;
848
135k
    if (BYTE_TYPE(enc, ptr) == BT_LF)
849
11.3k
      ptr += MINBPC(enc);
850
135k
    *nextTokPtr = ptr;
851
135k
    return XML_TOK_DATA_NEWLINE;
852
55.4k
  case BT_LF:
853
55.4k
    *nextTokPtr = ptr + MINBPC(enc);
854
55.4k
    return XML_TOK_DATA_NEWLINE;
855
41.7k
  case BT_RSQB:
856
41.7k
    ptr += MINBPC(enc);
857
41.7k
    if (! HAS_CHAR(enc, ptr, end))
858
1.19k
      return XML_TOK_TRAILING_RSQB;
859
40.5k
    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
860
23.8k
      break;
861
16.6k
    ptr += MINBPC(enc);
862
16.6k
    if (! HAS_CHAR(enc, ptr, end))
863
1.85k
      return XML_TOK_TRAILING_RSQB;
864
14.8k
    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
865
14.5k
      ptr -= MINBPC(enc);
866
14.5k
      break;
867
14.5k
    }
868
272
    *nextTokPtr = ptr;
869
272
    return XML_TOK_INVALID;
870
98.5k
    INVALID_CASES(ptr, nextTokPtr)
871
252k
  default:
872
252k
    ptr += MINBPC(enc);
873
252k
    break;
874
1.22M
  }
875
26.2M
  while (HAS_CHAR(enc, ptr, end)) {
876
26.2M
    switch (BYTE_TYPE(enc, ptr)) {
877
0
#  define LEAD_CASE(n)                                                         \
878
0
  case BT_LEAD##n:                                                             \
879
0
    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
880
0
      *nextTokPtr = ptr;                                                       \
881
0
      return XML_TOK_DATA_CHARS;                                               \
882
0
    }                                                                          \
883
0
    ptr += n;                                                                  \
884
0
    break;
885
0
      LEAD_CASE(2)
886
0
      LEAD_CASE(3)
887
672k
      LEAD_CASE(4)
888
0
#  undef LEAD_CASE
889
71.3k
    case BT_RSQB:
890
71.3k
      if (HAS_CHARS(enc, ptr, end, 2)) {
891
70.4k
        if (! CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) {
892
48.6k
          ptr += MINBPC(enc);
893
48.6k
          break;
894
48.6k
        }
895
21.8k
        if (HAS_CHARS(enc, ptr, end, 3)) {
896
20.2k
          if (! CHAR_MATCHES(enc, ptr + 2 * MINBPC(enc), ASCII_GT)) {
897
20.1k
            ptr += MINBPC(enc);
898
20.1k
            break;
899
20.1k
          }
900
153
          *nextTokPtr = ptr + 2 * MINBPC(enc);
901
153
          return XML_TOK_INVALID;
902
20.2k
        }
903
21.8k
      }
904
2.45k
      EXPAT_FALLTHROUGH;
905
66.4k
    case BT_AMP:
906
152k
    case BT_LT:
907
154k
    case BT_NONXML:
908
154k
    case BT_MALFORM:
909
155k
    case BT_TRAIL:
910
254k
    case BT_CR:
911
303k
    case BT_LF:
912
303k
      *nextTokPtr = ptr;
913
303k
      return XML_TOK_DATA_CHARS;
914
25.2M
    default:
915
25.2M
      ptr += MINBPC(enc);
916
25.2M
      break;
917
26.2M
    }
918
26.2M
  }
919
24.7k
  *nextTokPtr = ptr;
920
24.7k
  return XML_TOK_DATA_CHARS;
921
333k
}
xmltok.c:big2_contentTok
Line
Count
Source
827
1.59M
                   const char **nextTokPtr) {
828
1.59M
  if (ptr >= end)
829
58.8k
    return XML_TOK_NONE;
830
1.53M
  if (MINBPC(enc) > 1) {
831
1.53M
    size_t n = end - ptr;
832
1.53M
    if (n & (MINBPC(enc) - 1)) {
833
392k
      n &= ~(MINBPC(enc) - 1);
834
392k
      if (n == 0)
835
7.64k
        return XML_TOK_PARTIAL;
836
384k
      end = ptr + n;
837
384k
    }
838
1.53M
  }
839
1.52M
  switch (BYTE_TYPE(enc, ptr)) {
840
567k
  case BT_LT:
841
567k
    return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
842
187k
  case BT_AMP:
843
187k
    return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
844
203k
  case BT_CR:
845
203k
    ptr += MINBPC(enc);
846
203k
    if (! HAS_CHAR(enc, ptr, end))
847
1.98k
      return XML_TOK_TRAILING_CR;
848
201k
    if (BYTE_TYPE(enc, ptr) == BT_LF)
849
27.5k
      ptr += MINBPC(enc);
850
201k
    *nextTokPtr = ptr;
851
201k
    return XML_TOK_DATA_NEWLINE;
852
77.7k
  case BT_LF:
853
77.7k
    *nextTokPtr = ptr + MINBPC(enc);
854
77.7k
    return XML_TOK_DATA_NEWLINE;
855
62.5k
  case BT_RSQB:
856
62.5k
    ptr += MINBPC(enc);
857
62.5k
    if (! HAS_CHAR(enc, ptr, end))
858
1.28k
      return XML_TOK_TRAILING_RSQB;
859
61.3k
    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
860
41.9k
      break;
861
19.3k
    ptr += MINBPC(enc);
862
19.3k
    if (! HAS_CHAR(enc, ptr, end))
863
1.27k
      return XML_TOK_TRAILING_RSQB;
864
18.0k
    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
865
17.9k
      ptr -= MINBPC(enc);
866
17.9k
      break;
867
17.9k
    }
868
144
    *nextTokPtr = ptr;
869
144
    return XML_TOK_INVALID;
870
72.7k
    INVALID_CASES(ptr, nextTokPtr)
871
380k
  default:
872
380k
    ptr += MINBPC(enc);
873
380k
    break;
874
1.52M
  }
875
31.6M
  while (HAS_CHAR(enc, ptr, end)) {
876
31.6M
    switch (BYTE_TYPE(enc, ptr)) {
877
0
#  define LEAD_CASE(n)                                                         \
878
0
  case BT_LEAD##n:                                                             \
879
0
    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
880
0
      *nextTokPtr = ptr;                                                       \
881
0
      return XML_TOK_DATA_CHARS;                                               \
882
0
    }                                                                          \
883
0
    ptr += n;                                                                  \
884
0
    break;
885
0
      LEAD_CASE(2)
886
0
      LEAD_CASE(3)
887
814k
      LEAD_CASE(4)
888
0
#  undef LEAD_CASE
889
75.6k
    case BT_RSQB:
890
75.6k
      if (HAS_CHARS(enc, ptr, end, 2)) {
891
75.0k
        if (! CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) {
892
54.2k
          ptr += MINBPC(enc);
893
54.2k
          break;
894
54.2k
        }
895
20.8k
        if (HAS_CHARS(enc, ptr, end, 3)) {
896
19.8k
          if (! CHAR_MATCHES(enc, ptr + 2 * MINBPC(enc), ASCII_GT)) {
897
19.2k
            ptr += MINBPC(enc);
898
19.2k
            break;
899
19.2k
          }
900
576
          *nextTokPtr = ptr + 2 * MINBPC(enc);
901
576
          return XML_TOK_INVALID;
902
19.8k
        }
903
20.8k
      }
904
1.53k
      EXPAT_FALLTHROUGH;
905
79.9k
    case BT_AMP:
906
227k
    case BT_LT:
907
230k
    case BT_NONXML:
908
230k
    case BT_MALFORM:
909
231k
    case BT_TRAIL:
910
355k
    case BT_CR:
911
418k
    case BT_LF:
912
418k
      *nextTokPtr = ptr;
913
418k
      return XML_TOK_DATA_CHARS;
914
30.3M
    default:
915
30.3M
      ptr += MINBPC(enc);
916
30.3M
      break;
917
31.6M
    }
918
31.6M
  }
919
42.7k
  *nextTokPtr = ptr;
920
42.7k
  return XML_TOK_DATA_CHARS;
921
468k
}
922
923
/* ptr points to character following "%" */
924
925
static int PTRCALL
926
PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
927
622k
                    const char **nextTokPtr) {
928
622k
  REQUIRE_CHAR(enc, ptr, end);
929
620k
  switch (BYTE_TYPE(enc, ptr)) {
930
528k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
931
33.9k
  case BT_S:
932
50.5k
  case BT_LF:
933
68.4k
  case BT_CR:
934
73.3k
  case BT_PERCNT:
935
73.3k
    *nextTokPtr = ptr;
936
73.3k
    return XML_TOK_PERCENT;
937
5.49k
  default:
938
5.49k
    *nextTokPtr = ptr;
939
5.49k
    return XML_TOK_INVALID;
940
620k
  }
941
6.93M
  while (HAS_CHAR(enc, ptr, end)) {
942
6.93M
    switch (BYTE_TYPE(enc, ptr)) {
943
19.1M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
944
506k
    case BT_SEMI:
945
506k
      *nextTokPtr = ptr + MINBPC(enc);
946
506k
      return XML_TOK_PARAM_ENTITY_REF;
947
8.77k
    default:
948
8.77k
      *nextTokPtr = ptr;
949
8.77k
      return XML_TOK_INVALID;
950
6.93M
    }
951
6.93M
  }
952
7.36k
  return XML_TOK_PARTIAL;
953
533k
}
xmltok.c:normal_scanPercent
Line
Count
Source
927
469k
                    const char **nextTokPtr) {
928
469k
  REQUIRE_CHAR(enc, ptr, end);
929
468k
  switch (BYTE_TYPE(enc, ptr)) {
930
396k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
931
24.8k
  case BT_S:
932
30.1k
  case BT_LF:
933
38.6k
  case BT_CR:
934
42.3k
  case BT_PERCNT:
935
42.3k
    *nextTokPtr = ptr;
936
42.3k
    return XML_TOK_PERCENT;
937
1.78k
  default:
938
1.78k
    *nextTokPtr = ptr;
939
1.78k
    return XML_TOK_INVALID;
940
468k
  }
941
4.57M
  while (HAS_CHAR(enc, ptr, end)) {
942
4.57M
    switch (BYTE_TYPE(enc, ptr)) {
943
5.77M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
944
412k
    case BT_SEMI:
945
412k
      *nextTokPtr = ptr + MINBPC(enc);
946
412k
      return XML_TOK_PARAM_ENTITY_REF;
947
3.03k
    default:
948
3.03k
      *nextTokPtr = ptr;
949
3.03k
      return XML_TOK_INVALID;
950
4.57M
    }
951
4.57M
  }
952
2.45k
  return XML_TOK_PARTIAL;
953
421k
}
xmltok.c:little2_scanPercent
Line
Count
Source
927
78.4k
                    const char **nextTokPtr) {
928
78.4k
  REQUIRE_CHAR(enc, ptr, end);
929
77.8k
  switch (BYTE_TYPE(enc, ptr)) {
930
56.0k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
931
4.09k
  case BT_S:
932
8.94k
  case BT_LF:
933
14.0k
  case BT_CR:
934
14.8k
  case BT_PERCNT:
935
14.8k
    *nextTokPtr = ptr;
936
14.8k
    return XML_TOK_PERCENT;
937
1.62k
  default:
938
1.62k
    *nextTokPtr = ptr;
939
1.62k
    return XML_TOK_INVALID;
940
77.8k
  }
941
147k
  while (HAS_CHAR(enc, ptr, end)) {
942
147k
    switch (BYTE_TYPE(enc, ptr)) {
943
469k
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
944
50.5k
    case BT_SEMI:
945
50.5k
      *nextTokPtr = ptr + MINBPC(enc);
946
50.5k
      return XML_TOK_PARAM_ENTITY_REF;
947
2.95k
    default:
948
2.95k
      *nextTokPtr = ptr;
949
2.95k
      return XML_TOK_INVALID;
950
147k
    }
951
147k
  }
952
2.15k
  return XML_TOK_PARTIAL;
953
58.9k
}
xmltok.c:big2_scanPercent
Line
Count
Source
927
74.8k
                    const char **nextTokPtr) {
928
74.8k
  REQUIRE_CHAR(enc, ptr, end);
929
73.8k
  switch (BYTE_TYPE(enc, ptr)) {
930
75.9k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
931
4.96k
  case BT_S:
932
11.4k
  case BT_LF:
933
15.7k
  case BT_CR:
934
16.1k
  case BT_PERCNT:
935
16.1k
    *nextTokPtr = ptr;
936
16.1k
    return XML_TOK_PERCENT;
937
2.09k
  default:
938
2.09k
    *nextTokPtr = ptr;
939
2.09k
    return XML_TOK_INVALID;
940
73.8k
  }
941
2.21M
  while (HAS_CHAR(enc, ptr, end)) {
942
2.21M
    switch (BYTE_TYPE(enc, ptr)) {
943
12.9M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
944
43.7k
    case BT_SEMI:
945
43.7k
      *nextTokPtr = ptr + MINBPC(enc);
946
43.7k
      return XML_TOK_PARAM_ENTITY_REF;
947
2.78k
    default:
948
2.78k
      *nextTokPtr = ptr;
949
2.78k
      return XML_TOK_INVALID;
950
2.21M
    }
951
2.21M
  }
952
2.75k
  return XML_TOK_PARTIAL;
953
52.8k
}
954
955
static int PTRCALL
956
PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
957
465k
                      const char **nextTokPtr) {
958
465k
  REQUIRE_CHAR(enc, ptr, end);
959
463k
  switch (BYTE_TYPE(enc, ptr)) {
960
465k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
961
5.01k
  default:
962
5.01k
    *nextTokPtr = ptr;
963
5.01k
    return XML_TOK_INVALID;
964
463k
  }
965
4.89M
  while (HAS_CHAR(enc, ptr, end)) {
966
4.89M
    switch (BYTE_TYPE(enc, ptr)) {
967
18.0M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
968
311k
    case BT_CR:
969
353k
    case BT_LF:
970
375k
    case BT_S:
971
389k
    case BT_RPAR:
972
408k
    case BT_GT:
973
411k
    case BT_PERCNT:
974
423k
    case BT_VERBAR:
975
423k
      *nextTokPtr = ptr;
976
423k
      return XML_TOK_POUND_NAME;
977
8.75k
    default:
978
8.75k
      *nextTokPtr = ptr;
979
8.75k
      return XML_TOK_INVALID;
980
4.89M
    }
981
4.89M
  }
982
8.21k
  return -XML_TOK_POUND_NAME;
983
450k
}
xmltok.c:normal_scanPoundName
Line
Count
Source
957
387k
                      const char **nextTokPtr) {
958
387k
  REQUIRE_CHAR(enc, ptr, end);
959
386k
  switch (BYTE_TYPE(enc, ptr)) {
960
379k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
961
1.36k
  default:
962
1.36k
    *nextTokPtr = ptr;
963
1.36k
    return XML_TOK_INVALID;
964
386k
  }
965
3.51M
  while (HAS_CHAR(enc, ptr, end)) {
966
3.51M
    switch (BYTE_TYPE(enc, ptr)) {
967
10.9M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
968
296k
    case BT_CR:
969
331k
    case BT_LF:
970
345k
    case BT_S:
971
350k
    case BT_RPAR:
972
366k
    case BT_GT:
973
369k
    case BT_PERCNT:
974
373k
    case BT_VERBAR:
975
373k
      *nextTokPtr = ptr;
976
373k
      return XML_TOK_POUND_NAME;
977
3.16k
    default:
978
3.16k
      *nextTokPtr = ptr;
979
3.16k
      return XML_TOK_INVALID;
980
3.51M
    }
981
3.51M
  }
982
2.71k
  return -XML_TOK_POUND_NAME;
983
382k
}
xmltok.c:little2_scanPoundName
Line
Count
Source
957
38.7k
                      const char **nextTokPtr) {
958
38.7k
  REQUIRE_CHAR(enc, ptr, end);
959
38.2k
  switch (BYTE_TYPE(enc, ptr)) {
960
41.3k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
961
1.61k
  default:
962
1.61k
    *nextTokPtr = ptr;
963
1.61k
    return XML_TOK_INVALID;
964
38.2k
  }
965
840k
  while (HAS_CHAR(enc, ptr, end)) {
966
840k
    switch (BYTE_TYPE(enc, ptr)) {
967
4.44M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
968
6.31k
    case BT_CR:
969
10.5k
    case BT_LF:
970
15.4k
    case BT_S:
971
20.4k
    case BT_RPAR:
972
21.8k
    case BT_GT:
973
22.1k
    case BT_PERCNT:
974
26.2k
    case BT_VERBAR:
975
26.2k
      *nextTokPtr = ptr;
976
26.2k
      return XML_TOK_POUND_NAME;
977
2.75k
    default:
978
2.75k
      *nextTokPtr = ptr;
979
2.75k
      return XML_TOK_INVALID;
980
840k
    }
981
840k
  }
982
2.44k
  return -XML_TOK_POUND_NAME;
983
34.6k
}
xmltok.c:big2_scanPoundName
Line
Count
Source
957
38.9k
                      const char **nextTokPtr) {
958
38.9k
  REQUIRE_CHAR(enc, ptr, end);
959
38.0k
  switch (BYTE_TYPE(enc, ptr)) {
960
44.7k
    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
961
2.03k
  default:
962
2.03k
    *nextTokPtr = ptr;
963
2.03k
    return XML_TOK_INVALID;
964
38.0k
  }
965
543k
  while (HAS_CHAR(enc, ptr, end)) {
966
543k
    switch (BYTE_TYPE(enc, ptr)) {
967
2.70M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
968
7.90k
    case BT_CR:
969
11.2k
    case BT_LF:
970
14.9k
    case BT_S:
971
18.2k
    case BT_RPAR:
972
20.0k
    case BT_GT:
973
20.3k
    case BT_PERCNT:
974
23.8k
    case BT_VERBAR:
975
23.8k
      *nextTokPtr = ptr;
976
23.8k
      return XML_TOK_POUND_NAME;
977
2.83k
    default:
978
2.83k
      *nextTokPtr = ptr;
979
2.83k
      return XML_TOK_INVALID;
980
543k
    }
981
543k
  }
982
3.06k
  return -XML_TOK_POUND_NAME;
983
33.6k
}
984
985
static int PTRCALL
986
PREFIX(scanLit)(int open, const ENCODING *enc, const char *ptr, const char *end,
987
742k
                const char **nextTokPtr) {
988
4.41G
  while (HAS_CHAR(enc, ptr, end)) {
989
4.41G
    int t = BYTE_TYPE(enc, ptr);
990
4.41G
    switch (t) {
991
90.0M
      INVALID_CASES(ptr, nextTokPtr)
992
6.91M
    case BT_QUOT:
993
9.67M
    case BT_APOS:
994
9.67M
      ptr += MINBPC(enc);
995
9.67M
      if (t != open)
996
8.99M
        break;
997
675k
      if (! HAS_CHAR(enc, ptr, end))
998
6.59k
        return -XML_TOK_LITERAL;
999
669k
      *nextTokPtr = ptr;
1000
669k
      switch (BYTE_TYPE(enc, ptr)) {
1001
146k
      case BT_S:
1002
267k
      case BT_CR:
1003
326k
      case BT_LF:
1004
642k
      case BT_GT:
1005
652k
      case BT_PERCNT:
1006
656k
      case BT_LSQB:
1007
656k
        return XML_TOK_LITERAL;
1008
12.9k
      default:
1009
12.9k
        return XML_TOK_INVALID;
1010
669k
      }
1011
4.35G
    default:
1012
4.35G
      ptr += MINBPC(enc);
1013
4.35G
      break;
1014
4.41G
    }
1015
4.41G
  }
1016
50.8k
  return XML_TOK_PARTIAL;
1017
742k
}
xmltok.c:normal_scanLit
Line
Count
Source
987
503k
                const char **nextTokPtr) {
988
685M
  while (HAS_CHAR(enc, ptr, end)) {
989
685M
    int t = BYTE_TYPE(enc, ptr);
990
685M
    switch (t) {
991
10.1M
      INVALID_CASES(ptr, nextTokPtr)
992
758k
    case BT_QUOT:
993
3.35M
    case BT_APOS:
994
3.35M
      ptr += MINBPC(enc);
995
3.35M
      if (t != open)
996
2.86M
        break;
997
487k
      if (! HAS_CHAR(enc, ptr, end))
998
1.82k
        return -XML_TOK_LITERAL;
999
485k
      *nextTokPtr = ptr;
1000
485k
      switch (BYTE_TYPE(enc, ptr)) {
1001
96.4k
      case BT_S:
1002
204k
      case BT_CR:
1003
230k
      case BT_LF:
1004
472k
      case BT_GT:
1005
479k
      case BT_PERCNT:
1006
481k
      case BT_LSQB:
1007
481k
        return XML_TOK_LITERAL;
1008
3.79k
      default:
1009
3.79k
        return XML_TOK_INVALID;
1010
485k
      }
1011
677M
    default:
1012
677M
      ptr += MINBPC(enc);
1013
677M
      break;
1014
685M
    }
1015
685M
  }
1016
10.4k
  return XML_TOK_PARTIAL;
1017
503k
}
xmltok.c:little2_scanLit
Line
Count
Source
987
102k
                const char **nextTokPtr) {
988
1.81G
  while (HAS_CHAR(enc, ptr, end)) {
989
1.81G
    int t = BYTE_TYPE(enc, ptr);
990
1.81G
    switch (t) {
991
41.7M
      INVALID_CASES(ptr, nextTokPtr)
992
3.13M
    case BT_QUOT:
993
3.19M
    case BT_APOS:
994
3.19M
      ptr += MINBPC(enc);
995
3.19M
      if (t != open)
996
3.11M
        break;
997
77.1k
      if (! HAS_CHAR(enc, ptr, end))
998
2.34k
        return -XML_TOK_LITERAL;
999
74.8k
      *nextTokPtr = ptr;
1000
74.8k
      switch (BYTE_TYPE(enc, ptr)) {
1001
9.84k
      case BT_S:
1002
16.4k
      case BT_CR:
1003
33.2k
      case BT_LF:
1004
68.4k
      case BT_GT:
1005
70.1k
      case BT_PERCNT:
1006
70.4k
      case BT_LSQB:
1007
70.4k
        return XML_TOK_LITERAL;
1008
4.40k
      default:
1009
4.40k
        return XML_TOK_INVALID;
1010
74.8k
      }
1011
1.78G
    default:
1012
1.78G
      ptr += MINBPC(enc);
1013
1.78G
      break;
1014
1.81G
    }
1015
1.81G
  }
1016
20.5k
  return XML_TOK_PARTIAL;
1017
102k
}
xmltok.c:big2_scanLit
Line
Count
Source
987
136k
                const char **nextTokPtr) {
988
1.91G
  while (HAS_CHAR(enc, ptr, end)) {
989
1.91G
    int t = BYTE_TYPE(enc, ptr);
990
1.91G
    switch (t) {
991
38.1M
      INVALID_CASES(ptr, nextTokPtr)
992
3.02M
    case BT_QUOT:
993
3.12M
    case BT_APOS:
994
3.12M
      ptr += MINBPC(enc);
995
3.12M
      if (t != open)
996
3.01M
        break;
997
111k
      if (! HAS_CHAR(enc, ptr, end))
998
2.42k
        return -XML_TOK_LITERAL;
999
109k
      *nextTokPtr = ptr;
1000
109k
      switch (BYTE_TYPE(enc, ptr)) {
1001
40.1k
      case BT_S:
1002
46.9k
      case BT_CR:
1003
63.2k
      case BT_LF:
1004
101k
      case BT_GT:
1005
103k
      case BT_PERCNT:
1006
104k
      case BT_LSQB:
1007
104k
        return XML_TOK_LITERAL;
1008
4.76k
      default:
1009
4.76k
        return XML_TOK_INVALID;
1010
109k
      }
1011
1.88G
    default:
1012
1.88G
      ptr += MINBPC(enc);
1013
1.88G
      break;
1014
1.91G
    }
1015
1.91G
  }
1016
19.8k
  return XML_TOK_PARTIAL;
1017
136k
}
1018
1019
static int PTRCALL
1020
PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
1021
52.3M
                  const char **nextTokPtr) {
1022
52.3M
  int tok;
1023
52.3M
  if (ptr >= end)
1024
59.1k
    return XML_TOK_NONE;
1025
52.2M
  if (MINBPC(enc) > 1) {
1026
3.66M
    size_t n = end - ptr;
1027
3.66M
    if (n & (MINBPC(enc) - 1)) {
1028
1.05M
      n &= ~(MINBPC(enc) - 1);
1029
1.05M
      if (n == 0)
1030
3.90k
        return XML_TOK_PARTIAL;
1031
1.05M
      end = ptr + n;
1032
1.05M
    }
1033
3.66M
  }
1034
52.2M
  switch (BYTE_TYPE(enc, ptr)) {
1035
165k
  case BT_QUOT:
1036
165k
    return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
1037
576k
  case BT_APOS:
1038
576k
    return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
1039
1.91M
  case BT_LT: {
1040
1.91M
    ptr += MINBPC(enc);
1041
1.91M
    REQUIRE_CHAR(enc, ptr, end);
1042
1.91M
    switch (BYTE_TYPE(enc, ptr)) {
1043
1.12M
    case BT_EXCL:
1044
1.12M
      return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1045
342k
    case BT_QUEST:
1046
342k
      return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1047
144k
    case BT_NMSTRT:
1048
245k
    case BT_HEX:
1049
410k
    case BT_NONASCII:
1050
411k
    case BT_LEAD2:
1051
413k
    case BT_LEAD3:
1052
416k
    case BT_LEAD4:
1053
416k
      *nextTokPtr = ptr - MINBPC(enc);
1054
416k
      return XML_TOK_INSTANCE_START;
1055
1.91M
    }
1056
29.3k
    *nextTokPtr = ptr;
1057
29.3k
    return XML_TOK_INVALID;
1058
1.91M
  }
1059
1.66M
  case BT_CR:
1060
1.66M
    if (ptr + MINBPC(enc) == end) {
1061
9.32k
      *nextTokPtr = end;
1062
      /* indicate that this might be part of a CR/LF pair */
1063
9.32k
      return -XML_TOK_PROLOG_S;
1064
9.32k
    }
1065
1.65M
    EXPAT_FALLTHROUGH;
1066
3.81M
  case BT_S:
1067
4.59M
  case BT_LF:
1068
26.7M
    for (;;) {
1069
26.7M
      ptr += MINBPC(enc);
1070
26.7M
      if (! HAS_CHAR(enc, ptr, end))
1071
14.7k
        break;
1072
26.7M
      switch (BYTE_TYPE(enc, ptr)) {
1073
8.10M
      case BT_S:
1074
8.31M
      case BT_LF:
1075
8.31M
        break;
1076
13.8M
      case BT_CR:
1077
        /* don't split CR/LF pair */
1078
13.8M
        if (ptr + MINBPC(enc) != end)
1079
13.8M
          break;
1080
5.35k
        EXPAT_FALLTHROUGH;
1081
4.57M
      default:
1082
4.57M
        *nextTokPtr = ptr;
1083
4.57M
        return XML_TOK_PROLOG_S;
1084
26.7M
      }
1085
26.7M
    }
1086
14.7k
    *nextTokPtr = ptr;
1087
14.7k
    return XML_TOK_PROLOG_S;
1088
409k
  case BT_PERCNT:
1089
409k
    return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1090
732k
  case BT_COMMA:
1091
732k
    *nextTokPtr = ptr + MINBPC(enc);
1092
732k
    return XML_TOK_COMMA;
1093
185k
  case BT_LSQB:
1094
185k
    *nextTokPtr = ptr + MINBPC(enc);
1095
185k
    return XML_TOK_OPEN_BRACKET;
1096
93.0k
  case BT_RSQB:
1097
93.0k
    ptr += MINBPC(enc);
1098
93.0k
    if (! HAS_CHAR(enc, ptr, end))
1099
1.89k
      return -XML_TOK_CLOSE_BRACKET;
1100
91.1k
    if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
1101
35.5k
      REQUIRE_CHARS(enc, ptr, end, 2);
1102
33.9k
      if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
1103
27.0k
        *nextTokPtr = ptr + 2 * MINBPC(enc);
1104
27.0k
        return XML_TOK_COND_SECT_CLOSE;
1105
27.0k
      }
1106
33.9k
    }
1107
62.5k
    *nextTokPtr = ptr;
1108
62.5k
    return XML_TOK_CLOSE_BRACKET;
1109
35.2M
  case BT_LPAR:
1110
35.2M
    *nextTokPtr = ptr + MINBPC(enc);
1111
35.2M
    return XML_TOK_OPEN_PAREN;
1112
2.11M
  case BT_RPAR:
1113
2.11M
    ptr += MINBPC(enc);
1114
2.11M
    if (! HAS_CHAR(enc, ptr, end))
1115
2.38k
      return -XML_TOK_CLOSE_PAREN;
1116
2.11M
    switch (BYTE_TYPE(enc, ptr)) {
1117
112k
    case BT_AST:
1118
112k
      *nextTokPtr = ptr + MINBPC(enc);
1119
112k
      return XML_TOK_CLOSE_PAREN_ASTERISK;
1120
242k
    case BT_QUEST:
1121
242k
      *nextTokPtr = ptr + MINBPC(enc);
1122
242k
      return XML_TOK_CLOSE_PAREN_QUESTION;
1123
411k
    case BT_PLUS:
1124
411k
      *nextTokPtr = ptr + MINBPC(enc);
1125
411k
      return XML_TOK_CLOSE_PAREN_PLUS;
1126
40.0k
    case BT_CR:
1127
68.8k
    case BT_LF:
1128
393k
    case BT_S:
1129
424k
    case BT_GT:
1130
915k
    case BT_COMMA:
1131
1.05M
    case BT_VERBAR:
1132
1.34M
    case BT_RPAR:
1133
1.34M
      *nextTokPtr = ptr;
1134
1.34M
      return XML_TOK_CLOSE_PAREN;
1135
2.11M
    }
1136
8.12k
    *nextTokPtr = ptr;
1137
8.12k
    return XML_TOK_INVALID;
1138
804k
  case BT_VERBAR:
1139
804k
    *nextTokPtr = ptr + MINBPC(enc);
1140
804k
    return XML_TOK_OR;
1141
812k
  case BT_GT:
1142
812k
    *nextTokPtr = ptr + MINBPC(enc);
1143
812k
    return XML_TOK_DECL_CLOSE;
1144
465k
  case BT_NUM:
1145
465k
    return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1146
0
#  define LEAD_CASE(n)                                                         \
1147
43.1k
  case BT_LEAD##n:                                                             \
1148
43.1k
    if (end - ptr < n)                                                         \
1149
9.45k
      return XML_TOK_PARTIAL_CHAR;                                             \
1150
37.3k
    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
1151
5.09k
      *nextTokPtr = ptr;                                                       \
1152
5.09k
      return XML_TOK_INVALID;                                                  \
1153
5.09k
    }                                                                          \
1154
37.3k
    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
1155
15.1k
      ptr += n;                                                                \
1156
15.1k
      tok = XML_TOK_NAME;                                                      \
1157
15.1k
      break;                                                                   \
1158
15.1k
    }                                                                          \
1159
32.2k
    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
1160
7.63k
      ptr += n;                                                                \
1161
7.63k
      tok = XML_TOK_NMTOKEN;                                                   \
1162
7.63k
      break;                                                                   \
1163
7.63k
    }                                                                          \
1164
17.0k
    *nextTokPtr = ptr;                                                         \
1165
9.45k
    return XML_TOK_INVALID;
1166
55.1k
    LEAD_CASE(2)
1167
48.6k
    LEAD_CASE(3)
1168
26.1k
    LEAD_CASE(4)
1169
0
#  undef LEAD_CASE
1170
2.88M
  case BT_NMSTRT:
1171
3.74M
  case BT_HEX:
1172
3.74M
    tok = XML_TOK_NAME;
1173
3.74M
    ptr += MINBPC(enc);
1174
3.74M
    break;
1175
32.3k
  case BT_DIGIT:
1176
48.5k
  case BT_NAME:
1177
77.3k
  case BT_MINUS:
1178
77.3k
#  ifdef XML_NS
1179
113k
  case BT_COLON:
1180
113k
#  endif
1181
113k
    tok = XML_TOK_NMTOKEN;
1182
113k
    ptr += MINBPC(enc);
1183
113k
    break;
1184
187k
  case BT_NONASCII:
1185
187k
    if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
1186
128k
      ptr += MINBPC(enc);
1187
128k
      tok = XML_TOK_NAME;
1188
128k
      break;
1189
128k
    }
1190
58.8k
    if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
1191
8.26k
      ptr += MINBPC(enc);
1192
8.26k
      tok = XML_TOK_NMTOKEN;
1193
8.26k
      break;
1194
8.26k
    }
1195
50.6k
    EXPAT_FALLTHROUGH;
1196
112k
  default:
1197
112k
    *nextTokPtr = ptr;
1198
112k
    return XML_TOK_INVALID;
1199
52.2M
  }
1200
288M
  while (HAS_CHAR(enc, ptr, end)) {
1201
288M
    switch (BYTE_TYPE(enc, ptr)) {
1202
796M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
1203
108k
    case BT_GT:
1204
1.28M
    case BT_RPAR:
1205
1.31M
    case BT_COMMA:
1206
1.67M
    case BT_VERBAR:
1207
1.84M
    case BT_LSQB:
1208
1.87M
    case BT_PERCNT:
1209
2.64M
    case BT_S:
1210
3.25M
    case BT_CR:
1211
3.60M
    case BT_LF:
1212
3.60M
      *nextTokPtr = ptr;
1213
3.60M
      return tok;
1214
0
#  ifdef XML_NS
1215
190k
    case BT_COLON:
1216
190k
      ptr += MINBPC(enc);
1217
190k
      switch (tok) {
1218
141k
      case XML_TOK_NAME:
1219
141k
        REQUIRE_CHAR(enc, ptr, end);
1220
140k
        tok = XML_TOK_PREFIXED_NAME;
1221
140k
        switch (BYTE_TYPE(enc, ptr)) {
1222
320k
          CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
1223
20.4k
        default:
1224
20.4k
          tok = XML_TOK_NMTOKEN;
1225
20.4k
          break;
1226
140k
        }
1227
135k
        break;
1228
135k
      case XML_TOK_PREFIXED_NAME:
1229
24.5k
        tok = XML_TOK_NMTOKEN;
1230
24.5k
        break;
1231
190k
      }
1232
185k
      break;
1233
185k
#  endif
1234
214k
    case BT_PLUS:
1235
214k
      if (tok == XML_TOK_NMTOKEN) {
1236
707
        *nextTokPtr = ptr;
1237
707
        return XML_TOK_INVALID;
1238
707
      }
1239
213k
      *nextTokPtr = ptr + MINBPC(enc);
1240
213k
      return XML_TOK_NAME_PLUS;
1241
24.3k
    case BT_AST:
1242
24.3k
      if (tok == XML_TOK_NMTOKEN) {
1243
815
        *nextTokPtr = ptr;
1244
815
        return XML_TOK_INVALID;
1245
815
      }
1246
23.5k
      *nextTokPtr = ptr + MINBPC(enc);
1247
23.5k
      return XML_TOK_NAME_ASTERISK;
1248
63.0k
    case BT_QUEST:
1249
63.0k
      if (tok == XML_TOK_NMTOKEN) {
1250
882
        *nextTokPtr = ptr;
1251
882
        return XML_TOK_INVALID;
1252
882
      }
1253
62.1k
      *nextTokPtr = ptr + MINBPC(enc);
1254
62.1k
      return XML_TOK_NAME_QUESTION;
1255
37.2k
    default:
1256
37.2k
      *nextTokPtr = ptr;
1257
37.2k
      return XML_TOK_INVALID;
1258
288M
    }
1259
288M
  }
1260
42.3k
  return -tok;
1261
4.01M
}
xmltok.c:normal_prologTok
Line
Count
Source
1021
48.6M
                  const char **nextTokPtr) {
1022
48.6M
  int tok;
1023
48.6M
  if (ptr >= end)
1024
42.0k
    return XML_TOK_NONE;
1025
48.5M
  if (MINBPC(enc) > 1) {
1026
0
    size_t n = end - ptr;
1027
0
    if (n & (MINBPC(enc) - 1)) {
1028
0
      n &= ~(MINBPC(enc) - 1);
1029
0
      if (n == 0)
1030
0
        return XML_TOK_PARTIAL;
1031
0
      end = ptr + n;
1032
0
    }
1033
0
  }
1034
48.5M
  switch (BYTE_TYPE(enc, ptr)) {
1035
103k
  case BT_QUOT:
1036
103k
    return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
1037
400k
  case BT_APOS:
1038
400k
    return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
1039
1.10M
  case BT_LT: {
1040
1.10M
    ptr += MINBPC(enc);
1041
1.10M
    REQUIRE_CHAR(enc, ptr, end);
1042
1.10M
    switch (BYTE_TYPE(enc, ptr)) {
1043
757k
    case BT_EXCL:
1044
757k
      return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1045
196k
    case BT_QUEST:
1046
196k
      return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1047
72.2k
    case BT_NMSTRT:
1048
136k
    case BT_HEX:
1049
136k
    case BT_NONASCII:
1050
137k
    case BT_LEAD2:
1051
139k
    case BT_LEAD3:
1052
139k
    case BT_LEAD4:
1053
139k
      *nextTokPtr = ptr - MINBPC(enc);
1054
139k
      return XML_TOK_INSTANCE_START;
1055
1.10M
    }
1056
7.21k
    *nextTokPtr = ptr;
1057
7.21k
    return XML_TOK_INVALID;
1058
1.10M
  }
1059
1.50M
  case BT_CR:
1060
1.50M
    if (ptr + MINBPC(enc) == end) {
1061
5.12k
      *nextTokPtr = end;
1062
      /* indicate that this might be part of a CR/LF pair */
1063
5.12k
      return -XML_TOK_PROLOG_S;
1064
5.12k
    }
1065
1.50M
    EXPAT_FALLTHROUGH;
1066
3.22M
  case BT_S:
1067
3.78M
  case BT_LF:
1068
25.8M
    for (;;) {
1069
25.8M
      ptr += MINBPC(enc);
1070
25.8M
      if (! HAS_CHAR(enc, ptr, end))
1071
8.50k
        break;
1072
25.8M
      switch (BYTE_TYPE(enc, ptr)) {
1073
8.06M
      case BT_S:
1074
8.24M
      case BT_LF:
1075
8.24M
        break;
1076
13.7M
      case BT_CR:
1077
        /* don't split CR/LF pair */
1078
13.7M
        if (ptr + MINBPC(enc) != end)
1079
13.7M
          break;
1080
2.68k
        EXPAT_FALLTHROUGH;
1081
3.77M
      default:
1082
3.77M
        *nextTokPtr = ptr;
1083
3.77M
        return XML_TOK_PROLOG_S;
1084
25.8M
      }
1085
25.8M
    }
1086
8.50k
    *nextTokPtr = ptr;
1087
8.50k
    return XML_TOK_PROLOG_S;
1088
318k
  case BT_PERCNT:
1089
318k
    return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1090
678k
  case BT_COMMA:
1091
678k
    *nextTokPtr = ptr + MINBPC(enc);
1092
678k
    return XML_TOK_COMMA;
1093
122k
  case BT_LSQB:
1094
122k
    *nextTokPtr = ptr + MINBPC(enc);
1095
122k
    return XML_TOK_OPEN_BRACKET;
1096
51.5k
  case BT_RSQB:
1097
51.5k
    ptr += MINBPC(enc);
1098
51.5k
    if (! HAS_CHAR(enc, ptr, end))
1099
799
      return -XML_TOK_CLOSE_BRACKET;
1100
50.7k
    if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
1101
26.9k
      REQUIRE_CHARS(enc, ptr, end, 2);
1102
26.5k
      if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
1103
24.3k
        *nextTokPtr = ptr + 2 * MINBPC(enc);
1104
24.3k
        return XML_TOK_COND_SECT_CLOSE;
1105
24.3k
      }
1106
26.5k
    }
1107
26.0k
    *nextTokPtr = ptr;
1108
26.0k
    return XML_TOK_CLOSE_BRACKET;
1109
35.0M
  case BT_LPAR:
1110
35.0M
    *nextTokPtr = ptr + MINBPC(enc);
1111
35.0M
    return XML_TOK_OPEN_PAREN;
1112
1.98M
  case BT_RPAR:
1113
1.98M
    ptr += MINBPC(enc);
1114
1.98M
    if (! HAS_CHAR(enc, ptr, end))
1115
908
      return -XML_TOK_CLOSE_PAREN;
1116
1.98M
    switch (BYTE_TYPE(enc, ptr)) {
1117
94.5k
    case BT_AST:
1118
94.5k
      *nextTokPtr = ptr + MINBPC(enc);
1119
94.5k
      return XML_TOK_CLOSE_PAREN_ASTERISK;
1120
231k
    case BT_QUEST:
1121
231k
      *nextTokPtr = ptr + MINBPC(enc);
1122
231k
      return XML_TOK_CLOSE_PAREN_QUESTION;
1123
404k
    case BT_PLUS:
1124
404k
      *nextTokPtr = ptr + MINBPC(enc);
1125
404k
      return XML_TOK_CLOSE_PAREN_PLUS;
1126
31.5k
    case BT_CR:
1127
49.0k
    case BT_LF:
1128
356k
    case BT_S:
1129
375k
    case BT_GT:
1130
855k
    case BT_COMMA:
1131
982k
    case BT_VERBAR:
1132
1.25M
    case BT_RPAR:
1133
1.25M
      *nextTokPtr = ptr;
1134
1.25M
      return XML_TOK_CLOSE_PAREN;
1135
1.98M
    }
1136
1.54k
    *nextTokPtr = ptr;
1137
1.54k
    return XML_TOK_INVALID;
1138
620k
  case BT_VERBAR:
1139
620k
    *nextTokPtr = ptr + MINBPC(enc);
1140
620k
    return XML_TOK_OR;
1141
643k
  case BT_GT:
1142
643k
    *nextTokPtr = ptr + MINBPC(enc);
1143
643k
    return XML_TOK_DECL_CLOSE;
1144
387k
  case BT_NUM:
1145
387k
    return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1146
0
#  define LEAD_CASE(n)                                                         \
1147
0
  case BT_LEAD##n:                                                             \
1148
0
    if (end - ptr < n)                                                         \
1149
0
      return XML_TOK_PARTIAL_CHAR;                                             \
1150
0
    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
1151
0
      *nextTokPtr = ptr;                                                       \
1152
0
      return XML_TOK_INVALID;                                                  \
1153
0
    }                                                                          \
1154
0
    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
1155
0
      ptr += n;                                                                \
1156
0
      tok = XML_TOK_NAME;                                                      \
1157
0
      break;                                                                   \
1158
0
    }                                                                          \
1159
0
    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
1160
0
      ptr += n;                                                                \
1161
0
      tok = XML_TOK_NMTOKEN;                                                   \
1162
0
      break;                                                                   \
1163
0
    }                                                                          \
1164
0
    *nextTokPtr = ptr;                                                         \
1165
0
    return XML_TOK_INVALID;
1166
55.1k
    LEAD_CASE(2)
1167
48.6k
    LEAD_CASE(3)
1168
7.93k
    LEAD_CASE(4)
1169
0
#  undef LEAD_CASE
1170
2.50M
  case BT_NMSTRT:
1171
3.18M
  case BT_HEX:
1172
3.18M
    tok = XML_TOK_NAME;
1173
3.18M
    ptr += MINBPC(enc);
1174
3.18M
    break;
1175
20.9k
  case BT_DIGIT:
1176
29.1k
  case BT_NAME:
1177
43.6k
  case BT_MINUS:
1178
43.6k
#  ifdef XML_NS
1179
68.3k
  case BT_COLON:
1180
68.3k
#  endif
1181
68.3k
    tok = XML_TOK_NMTOKEN;
1182
68.3k
    ptr += MINBPC(enc);
1183
68.3k
    break;
1184
0
  case BT_NONASCII:
1185
0
    if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
1186
0
      ptr += MINBPC(enc);
1187
0
      tok = XML_TOK_NAME;
1188
0
      break;
1189
0
    }
1190
0
    if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
1191
0
      ptr += MINBPC(enc);
1192
0
      tok = XML_TOK_NMTOKEN;
1193
0
      break;
1194
0
    }
1195
0
    EXPAT_FALLTHROUGH;
1196
28.0k
  default:
1197
28.0k
    *nextTokPtr = ptr;
1198
28.0k
    return XML_TOK_INVALID;
1199
48.5M
  }
1200
273M
  while (HAS_CHAR(enc, ptr, end)) {
1201
273M
    switch (BYTE_TYPE(enc, ptr)) {
1202
710M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
1203
102k
    case BT_GT:
1204
1.21M
    case BT_RPAR:
1205
1.22M
    case BT_COMMA:
1206
1.42M
    case BT_VERBAR:
1207
1.54M
    case BT_LSQB:
1208
1.56M
    case BT_PERCNT:
1209
2.15M
    case BT_S:
1210
2.71M
    case BT_CR:
1211
2.96M
    case BT_LF:
1212
2.96M
      *nextTokPtr = ptr;
1213
2.96M
      return tok;
1214
0
#  ifdef XML_NS
1215
83.1k
    case BT_COLON:
1216
83.1k
      ptr += MINBPC(enc);
1217
83.1k
      switch (tok) {
1218
71.0k
      case XML_TOK_NAME:
1219
71.0k
        REQUIRE_CHAR(enc, ptr, end);
1220
70.6k
        tok = XML_TOK_PREFIXED_NAME;
1221
70.6k
        switch (BYTE_TYPE(enc, ptr)) {
1222
168k
          CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
1223
6.64k
        default:
1224
6.64k
          tok = XML_TOK_NMTOKEN;
1225
6.64k
          break;
1226
70.6k
        }
1227
68.8k
        break;
1228
68.8k
      case XML_TOK_PREFIXED_NAME:
1229
5.26k
        tok = XML_TOK_NMTOKEN;
1230
5.26k
        break;
1231
83.1k
      }
1232
81.0k
      break;
1233
81.0k
#  endif
1234
204k
    case BT_PLUS:
1235
204k
      if (tok == XML_TOK_NMTOKEN) {
1236
305
        *nextTokPtr = ptr;
1237
305
        return XML_TOK_INVALID;
1238
305
      }
1239
204k
      *nextTokPtr = ptr + MINBPC(enc);
1240
204k
      return XML_TOK_NAME_PLUS;
1241
13.2k
    case BT_AST:
1242
13.2k
      if (tok == XML_TOK_NMTOKEN) {
1243
288
        *nextTokPtr = ptr;
1244
288
        return XML_TOK_INVALID;
1245
288
      }
1246
12.9k
      *nextTokPtr = ptr + MINBPC(enc);
1247
12.9k
      return XML_TOK_NAME_ASTERISK;
1248
53.4k
    case BT_QUEST:
1249
53.4k
      if (tok == XML_TOK_NMTOKEN) {
1250
326
        *nextTokPtr = ptr;
1251
326
        return XML_TOK_INVALID;
1252
326
      }
1253
53.1k
      *nextTokPtr = ptr + MINBPC(enc);
1254
53.1k
      return XML_TOK_NAME_QUESTION;
1255
17.4k
    default:
1256
17.4k
      *nextTokPtr = ptr;
1257
17.4k
      return XML_TOK_INVALID;
1258
273M
    }
1259
273M
  }
1260
20.1k
  return -tok;
1261
3.27M
}
xmltok.c:little2_prologTok
Line
Count
Source
1021
1.70M
                  const char **nextTokPtr) {
1022
1.70M
  int tok;
1023
1.70M
  if (ptr >= end)
1024
8.81k
    return XML_TOK_NONE;
1025
1.70M
  if (MINBPC(enc) > 1) {
1026
1.70M
    size_t n = end - ptr;
1027
1.70M
    if (n & (MINBPC(enc) - 1)) {
1028
492k
      n &= ~(MINBPC(enc) - 1);
1029
492k
      if (n == 0)
1030
2.25k
        return XML_TOK_PARTIAL;
1031
489k
      end = ptr + n;
1032
489k
    }
1033
1.70M
  }
1034
1.69M
  switch (BYTE_TYPE(enc, ptr)) {
1035
30.5k
  case BT_QUOT:
1036
30.5k
    return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
1037
72.4k
  case BT_APOS:
1038
72.4k
    return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
1039
405k
  case BT_LT: {
1040
405k
    ptr += MINBPC(enc);
1041
405k
    REQUIRE_CHAR(enc, ptr, end);
1042
405k
    switch (BYTE_TYPE(enc, ptr)) {
1043
178k
    case BT_EXCL:
1044
178k
      return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1045
70.4k
    case BT_QUEST:
1046
70.4k
      return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1047
38.4k
    case BT_NMSTRT:
1048
56.7k
    case BT_HEX:
1049
142k
    case BT_NONASCII:
1050
142k
    case BT_LEAD2:
1051
142k
    case BT_LEAD3:
1052
143k
    case BT_LEAD4:
1053
143k
      *nextTokPtr = ptr - MINBPC(enc);
1054
143k
      return XML_TOK_INSTANCE_START;
1055
405k
    }
1056
11.9k
    *nextTokPtr = ptr;
1057
11.9k
    return XML_TOK_INVALID;
1058
405k
  }
1059
82.1k
  case BT_CR:
1060
82.1k
    if (ptr + MINBPC(enc) == end) {
1061
2.00k
      *nextTokPtr = end;
1062
      /* indicate that this might be part of a CR/LF pair */
1063
2.00k
      return -XML_TOK_PROLOG_S;
1064
2.00k
    }
1065
80.1k
    EXPAT_FALLTHROUGH;
1066
267k
  case BT_S:
1067
354k
  case BT_LF:
1068
418k
    for (;;) {
1069
418k
      ptr += MINBPC(enc);
1070
418k
      if (! HAS_CHAR(enc, ptr, end))
1071
3.03k
        break;
1072
415k
      switch (BYTE_TYPE(enc, ptr)) {
1073
16.0k
      case BT_S:
1074
39.5k
      case BT_LF:
1075
39.5k
        break;
1076
25.7k
      case BT_CR:
1077
        /* don't split CR/LF pair */
1078
25.7k
        if (ptr + MINBPC(enc) != end)
1079
24.3k
          break;
1080
1.41k
        EXPAT_FALLTHROUGH;
1081
351k
      default:
1082
351k
        *nextTokPtr = ptr;
1083
351k
        return XML_TOK_PROLOG_S;
1084
415k
      }
1085
415k
    }
1086
3.03k
    *nextTokPtr = ptr;
1087
3.03k
    return XML_TOK_PROLOG_S;
1088
44.0k
  case BT_PERCNT:
1089
44.0k
    return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1090
27.6k
  case BT_COMMA:
1091
27.6k
    *nextTokPtr = ptr + MINBPC(enc);
1092
27.6k
    return XML_TOK_COMMA;
1093
31.3k
  case BT_LSQB:
1094
31.3k
    *nextTokPtr = ptr + MINBPC(enc);
1095
31.3k
    return XML_TOK_OPEN_BRACKET;
1096
20.1k
  case BT_RSQB:
1097
20.1k
    ptr += MINBPC(enc);
1098
20.1k
    if (! HAS_CHAR(enc, ptr, end))
1099
427
      return -XML_TOK_CLOSE_BRACKET;
1100
19.6k
    if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
1101
3.95k
      REQUIRE_CHARS(enc, ptr, end, 2);
1102
3.46k
      if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
1103
1.32k
        *nextTokPtr = ptr + 2 * MINBPC(enc);
1104
1.32k
        return XML_TOK_COND_SECT_CLOSE;
1105
1.32k
      }
1106
3.46k
    }
1107
17.8k
    *nextTokPtr = ptr;
1108
17.8k
    return XML_TOK_CLOSE_BRACKET;
1109
69.9k
  case BT_LPAR:
1110
69.9k
    *nextTokPtr = ptr + MINBPC(enc);
1111
69.9k
    return XML_TOK_OPEN_PAREN;
1112
63.3k
  case BT_RPAR:
1113
63.3k
    ptr += MINBPC(enc);
1114
63.3k
    if (! HAS_CHAR(enc, ptr, end))
1115
537
      return -XML_TOK_CLOSE_PAREN;
1116
62.7k
    switch (BYTE_TYPE(enc, ptr)) {
1117
9.83k
    case BT_AST:
1118
9.83k
      *nextTokPtr = ptr + MINBPC(enc);
1119
9.83k
      return XML_TOK_CLOSE_PAREN_ASTERISK;
1120
5.40k
    case BT_QUEST:
1121
5.40k
      *nextTokPtr = ptr + MINBPC(enc);
1122
5.40k
      return XML_TOK_CLOSE_PAREN_QUESTION;
1123
3.27k
    case BT_PLUS:
1124
3.27k
      *nextTokPtr = ptr + MINBPC(enc);
1125
3.27k
      return XML_TOK_CLOSE_PAREN_PLUS;
1126
3.69k
    case BT_CR:
1127
8.88k
    case BT_LF:
1128
17.1k
    case BT_S:
1129
22.4k
    case BT_GT:
1130
27.5k
    case BT_COMMA:
1131
33.4k
    case BT_VERBAR:
1132
41.2k
    case BT_RPAR:
1133
41.2k
      *nextTokPtr = ptr;
1134
41.2k
      return XML_TOK_CLOSE_PAREN;
1135
62.7k
    }
1136
3.07k
    *nextTokPtr = ptr;
1137
3.07k
    return XML_TOK_INVALID;
1138
92.8k
  case BT_VERBAR:
1139
92.8k
    *nextTokPtr = ptr + MINBPC(enc);
1140
92.8k
    return XML_TOK_OR;
1141
80.4k
  case BT_GT:
1142
80.4k
    *nextTokPtr = ptr + MINBPC(enc);
1143
80.4k
    return XML_TOK_DECL_CLOSE;
1144
38.7k
  case BT_NUM:
1145
38.7k
    return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1146
0
#  define LEAD_CASE(n)                                                         \
1147
0
  case BT_LEAD##n:                                                             \
1148
0
    if (end - ptr < n)                                                         \
1149
0
      return XML_TOK_PARTIAL_CHAR;                                             \
1150
0
    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
1151
0
      *nextTokPtr = ptr;                                                       \
1152
0
      return XML_TOK_INVALID;                                                  \
1153
0
    }                                                                          \
1154
0
    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
1155
0
      ptr += n;                                                                \
1156
0
      tok = XML_TOK_NAME;                                                      \
1157
0
      break;                                                                   \
1158
0
    }                                                                          \
1159
0
    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
1160
0
      ptr += n;                                                                \
1161
0
      tok = XML_TOK_NMTOKEN;                                                   \
1162
0
      break;                                                                   \
1163
0
    }                                                                          \
1164
0
    *nextTokPtr = ptr;                                                         \
1165
0
    return XML_TOK_INVALID;
1166
0
    LEAD_CASE(2)
1167
0
    LEAD_CASE(3)
1168
7.97k
    LEAD_CASE(4)
1169
0
#  undef LEAD_CASE
1170
152k
  case BT_NMSTRT:
1171
239k
  case BT_HEX:
1172
239k
    tok = XML_TOK_NAME;
1173
239k
    ptr += MINBPC(enc);
1174
239k
    break;
1175
6.29k
  case BT_DIGIT:
1176
9.92k
  case BT_NAME:
1177
16.8k
  case BT_MINUS:
1178
16.8k
#  ifdef XML_NS
1179
22.3k
  case BT_COLON:
1180
22.3k
#  endif
1181
22.3k
    tok = XML_TOK_NMTOKEN;
1182
22.3k
    ptr += MINBPC(enc);
1183
22.3k
    break;
1184
87.9k
  case BT_NONASCII:
1185
87.9k
    if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
1186
64.4k
      ptr += MINBPC(enc);
1187
64.4k
      tok = XML_TOK_NAME;
1188
64.4k
      break;
1189
64.4k
    }
1190
23.4k
    if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
1191
3.52k
      ptr += MINBPC(enc);
1192
3.52k
      tok = XML_TOK_NMTOKEN;
1193
3.52k
      break;
1194
3.52k
    }
1195
19.9k
    EXPAT_FALLTHROUGH;
1196
31.4k
  default:
1197
31.4k
    *nextTokPtr = ptr;
1198
31.4k
    return XML_TOK_INVALID;
1199
1.69M
  }
1200
1.05M
  while (HAS_CHAR(enc, ptr, end)) {
1201
1.05M
    switch (BYTE_TYPE(enc, ptr)) {
1202
3.13M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
1203
2.61k
    case BT_GT:
1204
30.4k
    case BT_RPAR:
1205
41.7k
    case BT_COMMA:
1206
122k
    case BT_VERBAR:
1207
149k
    case BT_LSQB:
1208
152k
    case BT_PERCNT:
1209
231k
    case BT_S:
1210
254k
    case BT_CR:
1211
289k
    case BT_LF:
1212
289k
      *nextTokPtr = ptr;
1213
289k
      return tok;
1214
0
#  ifdef XML_NS
1215
56.4k
    case BT_COLON:
1216
56.4k
      ptr += MINBPC(enc);
1217
56.4k
      switch (tok) {
1218
37.0k
      case XML_TOK_NAME:
1219
37.0k
        REQUIRE_CHAR(enc, ptr, end);
1220
36.6k
        tok = XML_TOK_PREFIXED_NAME;
1221
36.6k
        switch (BYTE_TYPE(enc, ptr)) {
1222
75.4k
          CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
1223
8.08k
        default:
1224
8.08k
          tok = XML_TOK_NMTOKEN;
1225
8.08k
          break;
1226
36.6k
        }
1227
34.9k
        break;
1228
34.9k
      case XML_TOK_PREFIXED_NAME:
1229
10.4k
        tok = XML_TOK_NMTOKEN;
1230
10.4k
        break;
1231
56.4k
      }
1232
54.3k
      break;
1233
54.3k
#  endif
1234
54.3k
    case BT_PLUS:
1235
4.41k
      if (tok == XML_TOK_NMTOKEN) {
1236
268
        *nextTokPtr = ptr;
1237
268
        return XML_TOK_INVALID;
1238
268
      }
1239
4.14k
      *nextTokPtr = ptr + MINBPC(enc);
1240
4.14k
      return XML_TOK_NAME_PLUS;
1241
4.83k
    case BT_AST:
1242
4.83k
      if (tok == XML_TOK_NMTOKEN) {
1243
265
        *nextTokPtr = ptr;
1244
265
        return XML_TOK_INVALID;
1245
265
      }
1246
4.56k
      *nextTokPtr = ptr + MINBPC(enc);
1247
4.56k
      return XML_TOK_NAME_ASTERISK;
1248
4.41k
    case BT_QUEST:
1249
4.41k
      if (tok == XML_TOK_NMTOKEN) {
1250
277
        *nextTokPtr = ptr;
1251
277
        return XML_TOK_INVALID;
1252
277
      }
1253
4.13k
      *nextTokPtr = ptr + MINBPC(enc);
1254
4.13k
      return XML_TOK_NAME_QUESTION;
1255
5.44k
    default:
1256
5.44k
      *nextTokPtr = ptr;
1257
5.44k
      return XML_TOK_INVALID;
1258
1.05M
    }
1259
1.05M
  }
1260
10.7k
  return -tok;
1261
330k
}
xmltok.c:big2_prologTok
Line
Count
Source
1021
1.97M
                  const char **nextTokPtr) {
1022
1.97M
  int tok;
1023
1.97M
  if (ptr >= end)
1024
8.38k
    return XML_TOK_NONE;
1025
1.96M
  if (MINBPC(enc) > 1) {
1026
1.96M
    size_t n = end - ptr;
1027
1.96M
    if (n & (MINBPC(enc) - 1)) {
1028
566k
      n &= ~(MINBPC(enc) - 1);
1029
566k
      if (n == 0)
1030
1.64k
        return XML_TOK_PARTIAL;
1031
564k
      end = ptr + n;
1032
564k
    }
1033
1.96M
  }
1034
1.96M
  switch (BYTE_TYPE(enc, ptr)) {
1035
32.2k
  case BT_QUOT:
1036
32.2k
    return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
1037
103k
  case BT_APOS:
1038
103k
    return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
1039
405k
  case BT_LT: {
1040
405k
    ptr += MINBPC(enc);
1041
405k
    REQUIRE_CHAR(enc, ptr, end);
1042
403k
    switch (BYTE_TYPE(enc, ptr)) {
1043
184k
    case BT_EXCL:
1044
184k
      return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1045
75.3k
    case BT_QUEST:
1046
75.3k
      return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1047
33.3k
    case BT_NMSTRT:
1048
52.3k
    case BT_HEX:
1049
131k
    case BT_NONASCII:
1050
131k
    case BT_LEAD2:
1051
131k
    case BT_LEAD3:
1052
133k
    case BT_LEAD4:
1053
133k
      *nextTokPtr = ptr - MINBPC(enc);
1054
133k
      return XML_TOK_INSTANCE_START;
1055
403k
    }
1056
10.2k
    *nextTokPtr = ptr;
1057
10.2k
    return XML_TOK_INVALID;
1058
403k
  }
1059
76.9k
  case BT_CR:
1060
76.9k
    if (ptr + MINBPC(enc) == end) {
1061
2.20k
      *nextTokPtr = end;
1062
      /* indicate that this might be part of a CR/LF pair */
1063
2.20k
      return -XML_TOK_PROLOG_S;
1064
2.20k
    }
1065
74.7k
    EXPAT_FALLTHROUGH;
1066
320k
  case BT_S:
1067
452k
  case BT_LF:
1068
506k
    for (;;) {
1069
506k
      ptr += MINBPC(enc);
1070
506k
      if (! HAS_CHAR(enc, ptr, end))
1071
3.21k
        break;
1072
503k
      switch (BYTE_TYPE(enc, ptr)) {
1073
21.8k
      case BT_S:
1074
36.8k
      case BT_LF:
1075
36.8k
        break;
1076
18.6k
      case BT_CR:
1077
        /* don't split CR/LF pair */
1078
18.6k
        if (ptr + MINBPC(enc) != end)
1079
17.3k
          break;
1080
1.26k
        EXPAT_FALLTHROUGH;
1081
448k
      default:
1082
448k
        *nextTokPtr = ptr;
1083
448k
        return XML_TOK_PROLOG_S;
1084
503k
      }
1085
503k
    }
1086
3.21k
    *nextTokPtr = ptr;
1087
3.21k
    return XML_TOK_PROLOG_S;
1088
46.9k
  case BT_PERCNT:
1089
46.9k
    return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1090
26.2k
  case BT_COMMA:
1091
26.2k
    *nextTokPtr = ptr + MINBPC(enc);
1092
26.2k
    return XML_TOK_COMMA;
1093
32.1k
  case BT_LSQB:
1094
32.1k
    *nextTokPtr = ptr + MINBPC(enc);
1095
32.1k
    return XML_TOK_OPEN_BRACKET;
1096
21.3k
  case BT_RSQB:
1097
21.3k
    ptr += MINBPC(enc);
1098
21.3k
    if (! HAS_CHAR(enc, ptr, end))
1099
665
      return -XML_TOK_CLOSE_BRACKET;
1100
20.6k
    if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
1101
4.65k
      REQUIRE_CHARS(enc, ptr, end, 2);
1102
3.97k
      if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
1103
1.44k
        *nextTokPtr = ptr + 2 * MINBPC(enc);
1104
1.44k
        return XML_TOK_COND_SECT_CLOSE;
1105
1.44k
      }
1106
3.97k
    }
1107
18.5k
    *nextTokPtr = ptr;
1108
18.5k
    return XML_TOK_CLOSE_BRACKET;
1109
80.7k
  case BT_LPAR:
1110
80.7k
    *nextTokPtr = ptr + MINBPC(enc);
1111
80.7k
    return XML_TOK_OPEN_PAREN;
1112
71.1k
  case BT_RPAR:
1113
71.1k
    ptr += MINBPC(enc);
1114
71.1k
    if (! HAS_CHAR(enc, ptr, end))
1115
936
      return -XML_TOK_CLOSE_PAREN;
1116
70.2k
    switch (BYTE_TYPE(enc, ptr)) {
1117
8.05k
    case BT_AST:
1118
8.05k
      *nextTokPtr = ptr + MINBPC(enc);
1119
8.05k
      return XML_TOK_CLOSE_PAREN_ASTERISK;
1120
5.56k
    case BT_QUEST:
1121
5.56k
      *nextTokPtr = ptr + MINBPC(enc);
1122
5.56k
      return XML_TOK_CLOSE_PAREN_QUESTION;
1123
3.74k
    case BT_PLUS:
1124
3.74k
      *nextTokPtr = ptr + MINBPC(enc);
1125
3.74k
      return XML_TOK_CLOSE_PAREN_PLUS;
1126
4.86k
    case BT_CR:
1127
10.8k
    case BT_LF:
1128
20.6k
    case BT_S:
1129
27.2k
    case BT_GT:
1130
32.6k
    case BT_COMMA:
1131
40.6k
    case BT_VERBAR:
1132
49.3k
    case BT_RPAR:
1133
49.3k
      *nextTokPtr = ptr;
1134
49.3k
      return XML_TOK_CLOSE_PAREN;
1135
70.2k
    }
1136
3.50k
    *nextTokPtr = ptr;
1137
3.50k
    return XML_TOK_INVALID;
1138
91.6k
  case BT_VERBAR:
1139
91.6k
    *nextTokPtr = ptr + MINBPC(enc);
1140
91.6k
    return XML_TOK_OR;
1141
88.9k
  case BT_GT:
1142
88.9k
    *nextTokPtr = ptr + MINBPC(enc);
1143
88.9k
    return XML_TOK_DECL_CLOSE;
1144
38.9k
  case BT_NUM:
1145
38.9k
    return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1146
0
#  define LEAD_CASE(n)                                                         \
1147
0
  case BT_LEAD##n:                                                             \
1148
0
    if (end - ptr < n)                                                         \
1149
0
      return XML_TOK_PARTIAL_CHAR;                                             \
1150
0
    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
1151
0
      *nextTokPtr = ptr;                                                       \
1152
0
      return XML_TOK_INVALID;                                                  \
1153
0
    }                                                                          \
1154
0
    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
1155
0
      ptr += n;                                                                \
1156
0
      tok = XML_TOK_NAME;                                                      \
1157
0
      break;                                                                   \
1158
0
    }                                                                          \
1159
0
    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
1160
0
      ptr += n;                                                                \
1161
0
      tok = XML_TOK_NMTOKEN;                                                   \
1162
0
      break;                                                                   \
1163
0
    }                                                                          \
1164
0
    *nextTokPtr = ptr;                                                         \
1165
0
    return XML_TOK_INVALID;
1166
0
    LEAD_CASE(2)
1167
0
    LEAD_CASE(3)
1168
10.1k
    LEAD_CASE(4)
1169
0
#  undef LEAD_CASE
1170
227k
  case BT_NMSTRT:
1171
318k
  case BT_HEX:
1172
318k
    tok = XML_TOK_NAME;
1173
318k
    ptr += MINBPC(enc);
1174
318k
    break;
1175
5.15k
  case BT_DIGIT:
1176
9.46k
  case BT_NAME:
1177
16.8k
  case BT_MINUS:
1178
16.8k
#  ifdef XML_NS
1179
22.4k
  case BT_COLON:
1180
22.4k
#  endif
1181
22.4k
    tok = XML_TOK_NMTOKEN;
1182
22.4k
    ptr += MINBPC(enc);
1183
22.4k
    break;
1184
99.3k
  case BT_NONASCII:
1185
99.3k
    if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
1186
63.9k
      ptr += MINBPC(enc);
1187
63.9k
      tok = XML_TOK_NAME;
1188
63.9k
      break;
1189
63.9k
    }
1190
35.3k
    if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
1191
4.74k
      ptr += MINBPC(enc);
1192
4.74k
      tok = XML_TOK_NMTOKEN;
1193
4.74k
      break;
1194
4.74k
    }
1195
30.6k
    EXPAT_FALLTHROUGH;
1196
52.9k
  default:
1197
52.9k
    *nextTokPtr = ptr;
1198
52.9k
    return XML_TOK_INVALID;
1199
1.96M
  }
1200
14.4M
  while (HAS_CHAR(enc, ptr, end)) {
1201
14.4M
    switch (BYTE_TYPE(enc, ptr)) {
1202
83.1M
      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
1203
3.34k
    case BT_GT:
1204
35.2k
    case BT_RPAR:
1205
43.2k
    case BT_COMMA:
1206
120k
    case BT_VERBAR:
1207
150k
    case BT_LSQB:
1208
153k
    case BT_PERCNT:
1209
264k
    case BT_S:
1210
286k
    case BT_CR:
1211
355k
    case BT_LF:
1212
355k
      *nextTokPtr = ptr;
1213
355k
      return tok;
1214
0
#  ifdef XML_NS
1215
51.2k
    case BT_COLON:
1216
51.2k
      ptr += MINBPC(enc);
1217
51.2k
      switch (tok) {
1218
33.2k
      case XML_TOK_NAME:
1219
33.2k
        REQUIRE_CHAR(enc, ptr, end);
1220
32.9k
        tok = XML_TOK_PREFIXED_NAME;
1221
32.9k
        switch (BYTE_TYPE(enc, ptr)) {
1222
76.6k
          CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
1223
5.69k
        default:
1224
5.69k
          tok = XML_TOK_NMTOKEN;
1225
5.69k
          break;
1226
32.9k
        }
1227
31.7k
        break;
1228
31.7k
      case XML_TOK_PREFIXED_NAME:
1229
8.82k
        tok = XML_TOK_NMTOKEN;
1230
8.82k
        break;
1231
51.2k
      }
1232
49.7k
      break;
1233
49.7k
#  endif
1234
49.7k
    case BT_PLUS:
1235
5.36k
      if (tok == XML_TOK_NMTOKEN) {
1236
134
        *nextTokPtr = ptr;
1237
134
        return XML_TOK_INVALID;
1238
134
      }
1239
5.23k
      *nextTokPtr = ptr + MINBPC(enc);
1240
5.23k
      return XML_TOK_NAME_PLUS;
1241
6.30k
    case BT_AST:
1242
6.30k
      if (tok == XML_TOK_NMTOKEN) {
1243
262
        *nextTokPtr = ptr;
1244
262
        return XML_TOK_INVALID;
1245
262
      }
1246
6.04k
      *nextTokPtr = ptr + MINBPC(enc);
1247
6.04k
      return XML_TOK_NAME_ASTERISK;
1248
5.14k
    case BT_QUEST:
1249
5.14k
      if (tok == XML_TOK_NMTOKEN) {
1250
279
        *nextTokPtr = ptr;
1251
279
        return XML_TOK_INVALID;
1252
279
      }
1253
4.86k
      *nextTokPtr = ptr + MINBPC(enc);
1254
4.86k
      return XML_TOK_NAME_QUESTION;
1255
14.3k
    default:
1256
14.3k
      *nextTokPtr = ptr;
1257
14.3k
      return XML_TOK_INVALID;
1258
14.4M
    }
1259
14.4M
  }
1260
11.4k
  return -tok;
1261
409k
}
1262
1263
static int PTRCALL
1264
PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end,
1265
4.97G
                          const char **nextTokPtr) {
1266
4.97G
  const char *start;
1267
4.97G
  if (ptr >= end)
1268
56.9M
    return XML_TOK_NONE;
1269
4.91G
  else if (! HAS_CHAR(enc, ptr, end)) {
1270
    /* This line cannot be executed.  The incoming data has already
1271
     * been tokenized once, so incomplete characters like this have
1272
     * already been eliminated from the input.  Retaining the paranoia
1273
     * check is still valuable, however.
1274
     */
1275
0
    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
1276
0
  }
1277
4.91G
  start = ptr;
1278
141G
  while (HAS_CHAR(enc, ptr, end)) {
1279
141G
    switch (BYTE_TYPE(enc, ptr)) {
1280
0
#  define LEAD_CASE(n)                                                         \
1281
98.6G
  case BT_LEAD##n:                                                             \
1282
98.6G
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1283
98.6G
    break;
1284
12.2G
      LEAD_CASE(2)
1285
84.1G
      LEAD_CASE(3)
1286
2.24G
      LEAD_CASE(4)
1287
0
#  undef LEAD_CASE
1288
123M
    case BT_AMP:
1289
123M
      if (ptr == start)
1290
87.7M
        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1291
35.3M
      *nextTokPtr = ptr;
1292
35.3M
      return XML_TOK_DATA_CHARS;
1293
931
    case BT_LT:
1294
      /* this is for inside entity references */
1295
931
      *nextTokPtr = ptr;
1296
931
      return XML_TOK_INVALID;
1297
4.29G
    case BT_LF:
1298
4.29G
      if (ptr == start) {
1299
2.83G
        *nextTokPtr = ptr + MINBPC(enc);
1300
2.83G
        return XML_TOK_DATA_NEWLINE;
1301
2.83G
      }
1302
1.45G
      *nextTokPtr = ptr;
1303
1.45G
      return XML_TOK_DATA_CHARS;
1304
48.6M
    case BT_CR:
1305
48.6M
      if (ptr == start) {
1306
35.4M
        ptr += MINBPC(enc);
1307
35.4M
        if (! HAS_CHAR(enc, ptr, end))
1308
25.2k
          return XML_TOK_TRAILING_CR;
1309
35.4M
        if (BYTE_TYPE(enc, ptr) == BT_LF)
1310
8.38M
          ptr += MINBPC(enc);
1311
35.4M
        *nextTokPtr = ptr;
1312
35.4M
        return XML_TOK_DATA_NEWLINE;
1313
35.4M
      }
1314
13.1M
      *nextTokPtr = ptr;
1315
13.1M
      return XML_TOK_DATA_CHARS;
1316
407M
    case BT_S:
1317
407M
      if (ptr == start) {
1318
239M
        *nextTokPtr = ptr + MINBPC(enc);
1319
239M
        return XML_TOK_ATTRIBUTE_VALUE_S;
1320
239M
      }
1321
168M
      *nextTokPtr = ptr;
1322
168M
      return XML_TOK_DATA_CHARS;
1323
37.9G
    default:
1324
37.9G
      ptr += MINBPC(enc);
1325
37.9G
      break;
1326
141G
    }
1327
141G
  }
1328
44.6M
  *nextTokPtr = ptr;
1329
44.6M
  return XML_TOK_DATA_CHARS;
1330
4.91G
}
xmltok.c:normal_attributeValueTok
Line
Count
Source
1265
4.92G
                          const char **nextTokPtr) {
1266
4.92G
  const char *start;
1267
4.92G
  if (ptr >= end)
1268
56.8M
    return XML_TOK_NONE;
1269
4.86G
  else if (! HAS_CHAR(enc, ptr, end)) {
1270
    /* This line cannot be executed.  The incoming data has already
1271
     * been tokenized once, so incomplete characters like this have
1272
     * already been eliminated from the input.  Retaining the paranoia
1273
     * check is still valuable, however.
1274
     */
1275
0
    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
1276
0
  }
1277
4.86G
  start = ptr;
1278
140G
  while (HAS_CHAR(enc, ptr, end)) {
1279
140G
    switch (BYTE_TYPE(enc, ptr)) {
1280
0
#  define LEAD_CASE(n)                                                         \
1281
0
  case BT_LEAD##n:                                                             \
1282
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1283
0
    break;
1284
12.2G
      LEAD_CASE(2)
1285
84.1G
      LEAD_CASE(3)
1286
2.21G
      LEAD_CASE(4)
1287
0
#  undef LEAD_CASE
1288
116M
    case BT_AMP:
1289
116M
      if (ptr == start)
1290
83.0M
        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1291
33.2M
      *nextTokPtr = ptr;
1292
33.2M
      return XML_TOK_DATA_CHARS;
1293
819
    case BT_LT:
1294
      /* this is for inside entity references */
1295
819
      *nextTokPtr = ptr;
1296
819
      return XML_TOK_INVALID;
1297
4.28G
    case BT_LF:
1298
4.28G
      if (ptr == start) {
1299
2.83G
        *nextTokPtr = ptr + MINBPC(enc);
1300
2.83G
        return XML_TOK_DATA_NEWLINE;
1301
2.83G
      }
1302
1.45G
      *nextTokPtr = ptr;
1303
1.45G
      return XML_TOK_DATA_CHARS;
1304
18.0M
    case BT_CR:
1305
18.0M
      if (ptr == start) {
1306
14.8M
        ptr += MINBPC(enc);
1307
14.8M
        if (! HAS_CHAR(enc, ptr, end))
1308
13.0k
          return XML_TOK_TRAILING_CR;
1309
14.8M
        if (BYTE_TYPE(enc, ptr) == BT_LF)
1310
344k
          ptr += MINBPC(enc);
1311
14.8M
        *nextTokPtr = ptr;
1312
14.8M
        return XML_TOK_DATA_NEWLINE;
1313
14.8M
      }
1314
3.18M
      *nextTokPtr = ptr;
1315
3.18M
      return XML_TOK_DATA_CHARS;
1316
406M
    case BT_S:
1317
406M
      if (ptr == start) {
1318
238M
        *nextTokPtr = ptr + MINBPC(enc);
1319
238M
        return XML_TOK_ATTRIBUTE_VALUE_S;
1320
238M
      }
1321
167M
      *nextTokPtr = ptr;
1322
167M
      return XML_TOK_DATA_CHARS;
1323
37.1G
    default:
1324
37.1G
      ptr += MINBPC(enc);
1325
37.1G
      break;
1326
140G
    }
1327
140G
  }
1328
44.5M
  *nextTokPtr = ptr;
1329
44.5M
  return XML_TOK_DATA_CHARS;
1330
4.86G
}
xmltok.c:little2_attributeValueTok
Line
Count
Source
1265
13.7M
                          const char **nextTokPtr) {
1266
13.7M
  const char *start;
1267
13.7M
  if (ptr >= end)
1268
36.2k
    return XML_TOK_NONE;
1269
13.7M
  else if (! HAS_CHAR(enc, ptr, end)) {
1270
    /* This line cannot be executed.  The incoming data has already
1271
     * been tokenized once, so incomplete characters like this have
1272
     * already been eliminated from the input.  Retaining the paranoia
1273
     * check is still valuable, however.
1274
     */
1275
0
    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
1276
0
  }
1277
13.7M
  start = ptr;
1278
253M
  while (HAS_CHAR(enc, ptr, end)) {
1279
253M
    switch (BYTE_TYPE(enc, ptr)) {
1280
0
#  define LEAD_CASE(n)                                                         \
1281
0
  case BT_LEAD##n:                                                             \
1282
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1283
0
    break;
1284
0
      LEAD_CASE(2)
1285
0
      LEAD_CASE(3)
1286
4.18M
      LEAD_CASE(4)
1287
0
#  undef LEAD_CASE
1288
2.21M
    case BT_AMP:
1289
2.21M
      if (ptr == start)
1290
1.39M
        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1291
823k
      *nextTokPtr = ptr;
1292
823k
      return XML_TOK_DATA_CHARS;
1293
48
    case BT_LT:
1294
      /* this is for inside entity references */
1295
48
      *nextTokPtr = ptr;
1296
48
      return XML_TOK_INVALID;
1297
813k
    case BT_LF:
1298
813k
      if (ptr == start) {
1299
478k
        *nextTokPtr = ptr + MINBPC(enc);
1300
478k
        return XML_TOK_DATA_NEWLINE;
1301
478k
      }
1302
334k
      *nextTokPtr = ptr;
1303
334k
      return XML_TOK_DATA_CHARS;
1304
10.3M
    case BT_CR:
1305
10.3M
      if (ptr == start) {
1306
5.64M
        ptr += MINBPC(enc);
1307
5.64M
        if (! HAS_CHAR(enc, ptr, end))
1308
4.63k
          return XML_TOK_TRAILING_CR;
1309
5.64M
        if (BYTE_TYPE(enc, ptr) == BT_LF)
1310
257k
          ptr += MINBPC(enc);
1311
5.64M
        *nextTokPtr = ptr;
1312
5.64M
        return XML_TOK_DATA_NEWLINE;
1313
5.64M
      }
1314
4.65M
      *nextTokPtr = ptr;
1315
4.65M
      return XML_TOK_DATA_CHARS;
1316
381k
    case BT_S:
1317
381k
      if (ptr == start) {
1318
215k
        *nextTokPtr = ptr + MINBPC(enc);
1319
215k
        return XML_TOK_ATTRIBUTE_VALUE_S;
1320
215k
      }
1321
165k
      *nextTokPtr = ptr;
1322
165k
      return XML_TOK_DATA_CHARS;
1323
236M
    default:
1324
236M
      ptr += MINBPC(enc);
1325
236M
      break;
1326
253M
    }
1327
253M
  }
1328
14.8k
  *nextTokPtr = ptr;
1329
14.8k
  return XML_TOK_DATA_CHARS;
1330
13.7M
}
xmltok.c:big2_attributeValueTok
Line
Count
Source
1265
33.9M
                          const char **nextTokPtr) {
1266
33.9M
  const char *start;
1267
33.9M
  if (ptr >= end)
1268
102k
    return XML_TOK_NONE;
1269
33.8M
  else if (! HAS_CHAR(enc, ptr, end)) {
1270
    /* This line cannot be executed.  The incoming data has already
1271
     * been tokenized once, so incomplete characters like this have
1272
     * already been eliminated from the input.  Retaining the paranoia
1273
     * check is still valuable, however.
1274
     */
1275
0
    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
1276
0
  }
1277
33.8M
  start = ptr;
1278
681M
  while (HAS_CHAR(enc, ptr, end)) {
1279
681M
    switch (BYTE_TYPE(enc, ptr)) {
1280
0
#  define LEAD_CASE(n)                                                         \
1281
0
  case BT_LEAD##n:                                                             \
1282
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1283
0
    break;
1284
0
      LEAD_CASE(2)
1285
0
      LEAD_CASE(3)
1286
22.6M
      LEAD_CASE(4)
1287
0
#  undef LEAD_CASE
1288
4.53M
    case BT_AMP:
1289
4.53M
      if (ptr == start)
1290
3.23M
        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1291
1.30M
      *nextTokPtr = ptr;
1292
1.30M
      return XML_TOK_DATA_CHARS;
1293
64
    case BT_LT:
1294
      /* this is for inside entity references */
1295
64
      *nextTokPtr = ptr;
1296
64
      return XML_TOK_INVALID;
1297
8.33M
    case BT_LF:
1298
8.33M
      if (ptr == start) {
1299
4.60M
        *nextTokPtr = ptr + MINBPC(enc);
1300
4.60M
        return XML_TOK_DATA_NEWLINE;
1301
4.60M
      }
1302
3.73M
      *nextTokPtr = ptr;
1303
3.73M
      return XML_TOK_DATA_CHARS;
1304
20.2M
    case BT_CR:
1305
20.2M
      if (ptr == start) {
1306
14.9M
        ptr += MINBPC(enc);
1307
14.9M
        if (! HAS_CHAR(enc, ptr, end))
1308
7.50k
          return XML_TOK_TRAILING_CR;
1309
14.9M
        if (BYTE_TYPE(enc, ptr) == BT_LF)
1310
7.77M
          ptr += MINBPC(enc);
1311
14.9M
        *nextTokPtr = ptr;
1312
14.9M
        return XML_TOK_DATA_NEWLINE;
1313
14.9M
      }
1314
5.34M
      *nextTokPtr = ptr;
1315
5.34M
      return XML_TOK_DATA_CHARS;
1316
699k
    case BT_S:
1317
699k
      if (ptr == start) {
1318
481k
        *nextTokPtr = ptr + MINBPC(enc);
1319
481k
        return XML_TOK_ATTRIBUTE_VALUE_S;
1320
481k
      }
1321
218k
      *nextTokPtr = ptr;
1322
218k
      return XML_TOK_DATA_CHARS;
1323
625M
    default:
1324
625M
      ptr += MINBPC(enc);
1325
625M
      break;
1326
681M
    }
1327
681M
  }
1328
60.4k
  *nextTokPtr = ptr;
1329
60.4k
  return XML_TOK_DATA_CHARS;
1330
33.8M
}
1331
1332
static int PTRCALL
1333
PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end,
1334
54.5M
                       const char **nextTokPtr) {
1335
54.5M
  const char *start;
1336
54.5M
  if (ptr >= end)
1337
198k
    return XML_TOK_NONE;
1338
54.3M
  else if (! HAS_CHAR(enc, ptr, end)) {
1339
    /* This line cannot be executed.  The incoming data has already
1340
     * been tokenized once, so incomplete characters like this have
1341
     * already been eliminated from the input.  Retaining the paranoia
1342
     * check is still valuable, however.
1343
     */
1344
0
    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
1345
0
  }
1346
54.3M
  start = ptr;
1347
3.34G
  while (HAS_CHAR(enc, ptr, end)) {
1348
3.34G
    switch (BYTE_TYPE(enc, ptr)) {
1349
0
#  define LEAD_CASE(n)                                                         \
1350
369M
  case BT_LEAD##n:                                                             \
1351
369M
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1352
369M
    break;
1353
4.72M
      LEAD_CASE(2)
1354
332M
      LEAD_CASE(3)
1355
32.1M
      LEAD_CASE(4)
1356
0
#  undef LEAD_CASE
1357
3.80M
    case BT_AMP:
1358
3.80M
      if (ptr == start)
1359
2.46M
        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1360
1.34M
      *nextTokPtr = ptr;
1361
1.34M
      return XML_TOK_DATA_CHARS;
1362
372k
    case BT_PERCNT:
1363
372k
      if (ptr == start) {
1364
213k
        int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1365
213k
        return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok;
1366
213k
      }
1367
158k
      *nextTokPtr = ptr;
1368
158k
      return XML_TOK_DATA_CHARS;
1369
19.3M
    case BT_LF:
1370
19.3M
      if (ptr == start) {
1371
11.3M
        *nextTokPtr = ptr + MINBPC(enc);
1372
11.3M
        return XML_TOK_DATA_NEWLINE;
1373
11.3M
      }
1374
7.97M
      *nextTokPtr = ptr;
1375
7.97M
      return XML_TOK_DATA_CHARS;
1376
30.6M
    case BT_CR:
1377
30.6M
      if (ptr == start) {
1378
19.9M
        ptr += MINBPC(enc);
1379
19.9M
        if (! HAS_CHAR(enc, ptr, end))
1380
14.4k
          return XML_TOK_TRAILING_CR;
1381
19.9M
        if (BYTE_TYPE(enc, ptr) == BT_LF)
1382
1.17M
          ptr += MINBPC(enc);
1383
19.9M
        *nextTokPtr = ptr;
1384
19.9M
        return XML_TOK_DATA_NEWLINE;
1385
19.9M
      }
1386
10.7M
      *nextTokPtr = ptr;
1387
10.7M
      return XML_TOK_DATA_CHARS;
1388
2.92G
    default:
1389
2.92G
      ptr += MINBPC(enc);
1390
2.92G
      break;
1391
3.34G
    }
1392
3.34G
  }
1393
149k
  *nextTokPtr = ptr;
1394
149k
  return XML_TOK_DATA_CHARS;
1395
54.3M
}
xmltok.c:normal_entityValueTok
Line
Count
Source
1334
28.8M
                       const char **nextTokPtr) {
1335
28.8M
  const char *start;
1336
28.8M
  if (ptr >= end)
1337
143k
    return XML_TOK_NONE;
1338
28.7M
  else if (! HAS_CHAR(enc, ptr, end)) {
1339
    /* This line cannot be executed.  The incoming data has already
1340
     * been tokenized once, so incomplete characters like this have
1341
     * already been eliminated from the input.  Retaining the paranoia
1342
     * check is still valuable, however.
1343
     */
1344
0
    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
1345
0
  }
1346
28.7M
  start = ptr;
1347
897M
  while (HAS_CHAR(enc, ptr, end)) {
1348
897M
    switch (BYTE_TYPE(enc, ptr)) {
1349
0
#  define LEAD_CASE(n)                                                         \
1350
0
  case BT_LEAD##n:                                                             \
1351
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1352
0
    break;
1353
4.72M
      LEAD_CASE(2)
1354
332M
      LEAD_CASE(3)
1355
5.86M
      LEAD_CASE(4)
1356
0
#  undef LEAD_CASE
1357
2.65M
    case BT_AMP:
1358
2.65M
      if (ptr == start)
1359
1.85M
        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1360
797k
      *nextTokPtr = ptr;
1361
797k
      return XML_TOK_DATA_CHARS;
1362
280k
    case BT_PERCNT:
1363
280k
      if (ptr == start) {
1364
151k
        int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1365
151k
        return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok;
1366
151k
      }
1367
129k
      *nextTokPtr = ptr;
1368
129k
      return XML_TOK_DATA_CHARS;
1369
10.6M
    case BT_LF:
1370
10.6M
      if (ptr == start) {
1371
6.82M
        *nextTokPtr = ptr + MINBPC(enc);
1372
6.82M
        return XML_TOK_DATA_NEWLINE;
1373
6.82M
      }
1374
3.79M
      *nextTokPtr = ptr;
1375
3.79M
      return XML_TOK_DATA_CHARS;
1376
15.0M
    case BT_CR:
1377
15.0M
      if (ptr == start) {
1378
10.9M
        ptr += MINBPC(enc);
1379
10.9M
        if (! HAS_CHAR(enc, ptr, end))
1380
6.27k
          return XML_TOK_TRAILING_CR;
1381
10.9M
        if (BYTE_TYPE(enc, ptr) == BT_LF)
1382
74.7k
          ptr += MINBPC(enc);
1383
10.9M
        *nextTokPtr = ptr;
1384
10.9M
        return XML_TOK_DATA_NEWLINE;
1385
10.9M
      }
1386
4.11M
      *nextTokPtr = ptr;
1387
4.11M
      return XML_TOK_DATA_CHARS;
1388
526M
    default:
1389
526M
      ptr += MINBPC(enc);
1390
526M
      break;
1391
897M
    }
1392
897M
  }
1393
102k
  *nextTokPtr = ptr;
1394
102k
  return XML_TOK_DATA_CHARS;
1395
28.7M
}
xmltok.c:little2_entityValueTok
Line
Count
Source
1334
15.1M
                       const char **nextTokPtr) {
1335
15.1M
  const char *start;
1336
15.1M
  if (ptr >= end)
1337
26.3k
    return XML_TOK_NONE;
1338
15.1M
  else if (! HAS_CHAR(enc, ptr, end)) {
1339
    /* This line cannot be executed.  The incoming data has already
1340
     * been tokenized once, so incomplete characters like this have
1341
     * already been eliminated from the input.  Retaining the paranoia
1342
     * check is still valuable, however.
1343
     */
1344
0
    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
1345
0
  }
1346
15.1M
  start = ptr;
1347
1.17G
  while (HAS_CHAR(enc, ptr, end)) {
1348
1.17G
    switch (BYTE_TYPE(enc, ptr)) {
1349
0
#  define LEAD_CASE(n)                                                         \
1350
0
  case BT_LEAD##n:                                                             \
1351
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1352
0
    break;
1353
0
      LEAD_CASE(2)
1354
0
      LEAD_CASE(3)
1355
13.5M
      LEAD_CASE(4)
1356
0
#  undef LEAD_CASE
1357
771k
    case BT_AMP:
1358
771k
      if (ptr == start)
1359
398k
        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1360
372k
      *nextTokPtr = ptr;
1361
372k
      return XML_TOK_DATA_CHARS;
1362
44.9k
    case BT_PERCNT:
1363
44.9k
      if (ptr == start) {
1364
34.3k
        int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1365
34.3k
        return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok;
1366
34.3k
      }
1367
10.6k
      *nextTokPtr = ptr;
1368
10.6k
      return XML_TOK_DATA_CHARS;
1369
4.80M
    case BT_LF:
1370
4.80M
      if (ptr == start) {
1371
2.45M
        *nextTokPtr = ptr + MINBPC(enc);
1372
2.45M
        return XML_TOK_DATA_NEWLINE;
1373
2.45M
      }
1374
2.35M
      *nextTokPtr = ptr;
1375
2.35M
      return XML_TOK_DATA_CHARS;
1376
9.50M
    case BT_CR:
1377
9.50M
      if (ptr == start) {
1378
5.30M
        ptr += MINBPC(enc);
1379
5.30M
        if (! HAS_CHAR(enc, ptr, end))
1380
3.81k
          return XML_TOK_TRAILING_CR;
1381
5.30M
        if (BYTE_TYPE(enc, ptr) == BT_LF)
1382
288k
          ptr += MINBPC(enc);
1383
5.30M
        *nextTokPtr = ptr;
1384
5.30M
        return XML_TOK_DATA_NEWLINE;
1385
5.30M
      }
1386
4.20M
      *nextTokPtr = ptr;
1387
4.20M
      return XML_TOK_DATA_CHARS;
1388
1.14G
    default:
1389
1.14G
      ptr += MINBPC(enc);
1390
1.14G
      break;
1391
1.17G
    }
1392
1.17G
  }
1393
22.2k
  *nextTokPtr = ptr;
1394
22.2k
  return XML_TOK_DATA_CHARS;
1395
15.1M
}
xmltok.c:big2_entityValueTok
Line
Count
Source
1334
10.4M
                       const char **nextTokPtr) {
1335
10.4M
  const char *start;
1336
10.4M
  if (ptr >= end)
1337
28.9k
    return XML_TOK_NONE;
1338
10.4M
  else if (! HAS_CHAR(enc, ptr, end)) {
1339
    /* This line cannot be executed.  The incoming data has already
1340
     * been tokenized once, so incomplete characters like this have
1341
     * already been eliminated from the input.  Retaining the paranoia
1342
     * check is still valuable, however.
1343
     */
1344
0
    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
1345
0
  }
1346
10.4M
  start = ptr;
1347
1.27G
  while (HAS_CHAR(enc, ptr, end)) {
1348
1.27G
    switch (BYTE_TYPE(enc, ptr)) {
1349
0
#  define LEAD_CASE(n)                                                         \
1350
0
  case BT_LEAD##n:                                                             \
1351
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1352
0
    break;
1353
0
      LEAD_CASE(2)
1354
0
      LEAD_CASE(3)
1355
12.7M
      LEAD_CASE(4)
1356
0
#  undef LEAD_CASE
1357
386k
    case BT_AMP:
1358
386k
      if (ptr == start)
1359
209k
        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1360
177k
      *nextTokPtr = ptr;
1361
177k
      return XML_TOK_DATA_CHARS;
1362
46.5k
    case BT_PERCNT:
1363
46.5k
      if (ptr == start) {
1364
27.9k
        int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
1365
27.9k
        return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok;
1366
27.9k
      }
1367
18.5k
      *nextTokPtr = ptr;
1368
18.5k
      return XML_TOK_DATA_CHARS;
1369
3.91M
    case BT_LF:
1370
3.91M
      if (ptr == start) {
1371
2.08M
        *nextTokPtr = ptr + MINBPC(enc);
1372
2.08M
        return XML_TOK_DATA_NEWLINE;
1373
2.08M
      }
1374
1.82M
      *nextTokPtr = ptr;
1375
1.82M
      return XML_TOK_DATA_CHARS;
1376
6.03M
    case BT_CR:
1377
6.03M
      if (ptr == start) {
1378
3.63M
        ptr += MINBPC(enc);
1379
3.63M
        if (! HAS_CHAR(enc, ptr, end))
1380
4.39k
          return XML_TOK_TRAILING_CR;
1381
3.63M
        if (BYTE_TYPE(enc, ptr) == BT_LF)
1382
814k
          ptr += MINBPC(enc);
1383
3.63M
        *nextTokPtr = ptr;
1384
3.63M
        return XML_TOK_DATA_NEWLINE;
1385
3.63M
      }
1386
2.39M
      *nextTokPtr = ptr;
1387
2.39M
      return XML_TOK_DATA_CHARS;
1388
1.25G
    default:
1389
1.25G
      ptr += MINBPC(enc);
1390
1.25G
      break;
1391
1.27G
    }
1392
1.27G
  }
1393
24.1k
  *nextTokPtr = ptr;
1394
24.1k
  return XML_TOK_DATA_CHARS;
1395
10.4M
}
1396
1397
#  ifdef XML_DTD
1398
1399
static int PTRCALL
1400
PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *end,
1401
30.9k
                         const char **nextTokPtr) {
1402
30.9k
  int level = 0;
1403
30.9k
  if (MINBPC(enc) > 1) {
1404
20.9k
    size_t n = end - ptr;
1405
20.9k
    if (n & (MINBPC(enc) - 1)) {
1406
6.74k
      n &= ~(MINBPC(enc) - 1);
1407
6.74k
      end = ptr + n;
1408
6.74k
    }
1409
20.9k
  }
1410
322M
  while (HAS_CHAR(enc, ptr, end)) {
1411
322M
    switch (BYTE_TYPE(enc, ptr)) {
1412
16.4M
      INVALID_CASES(ptr, nextTokPtr)
1413
20.7M
    case BT_LT:
1414
20.7M
      ptr += MINBPC(enc);
1415
20.7M
      REQUIRE_CHAR(enc, ptr, end);
1416
20.7M
      if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) {
1417
16.1M
        ptr += MINBPC(enc);
1418
16.1M
        REQUIRE_CHAR(enc, ptr, end);
1419
16.1M
        if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) {
1420
14.3M
          ++level;
1421
14.3M
          ptr += MINBPC(enc);
1422
14.3M
        }
1423
16.1M
      }
1424
20.7M
      break;
1425
20.7M
    case BT_RSQB:
1426
13.2M
      ptr += MINBPC(enc);
1427
13.2M
      REQUIRE_CHAR(enc, ptr, end);
1428
13.2M
      if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
1429
8.46M
        ptr += MINBPC(enc);
1430
8.46M
        REQUIRE_CHAR(enc, ptr, end);
1431
8.46M
        if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
1432
6.36M
          ptr += MINBPC(enc);
1433
6.36M
          if (level == 0) {
1434
13.4k
            *nextTokPtr = ptr;
1435
13.4k
            return XML_TOK_IGNORE_SECT;
1436
13.4k
          }
1437
6.34M
          --level;
1438
6.34M
        }
1439
8.46M
      }
1440
13.2M
      break;
1441
280M
    default:
1442
280M
      ptr += MINBPC(enc);
1443
280M
      break;
1444
322M
    }
1445
322M
  }
1446
9.87k
  return XML_TOK_PARTIAL;
1447
30.9k
}
xmltok.c:normal_ignoreSectionTok
Line
Count
Source
1401
10.0k
                         const char **nextTokPtr) {
1402
10.0k
  int level = 0;
1403
10.0k
  if (MINBPC(enc) > 1) {
1404
0
    size_t n = end - ptr;
1405
0
    if (n & (MINBPC(enc) - 1)) {
1406
0
      n &= ~(MINBPC(enc) - 1);
1407
0
      end = ptr + n;
1408
0
    }
1409
0
  }
1410
146M
  while (HAS_CHAR(enc, ptr, end)) {
1411
146M
    switch (BYTE_TYPE(enc, ptr)) {
1412
5.42M
      INVALID_CASES(ptr, nextTokPtr)
1413
19.0M
    case BT_LT:
1414
19.0M
      ptr += MINBPC(enc);
1415
19.0M
      REQUIRE_CHAR(enc, ptr, end);
1416
19.0M
      if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) {
1417
14.8M
        ptr += MINBPC(enc);
1418
14.8M
        REQUIRE_CHAR(enc, ptr, end);
1419
14.8M
        if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) {
1420
13.1M
          ++level;
1421
13.1M
          ptr += MINBPC(enc);
1422
13.1M
        }
1423
14.8M
      }
1424
19.0M
      break;
1425
19.0M
    case BT_RSQB:
1426
11.4M
      ptr += MINBPC(enc);
1427
11.4M
      REQUIRE_CHAR(enc, ptr, end);
1428
11.4M
      if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
1429
7.57M
        ptr += MINBPC(enc);
1430
7.57M
        REQUIRE_CHAR(enc, ptr, end);
1431
7.57M
        if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
1432
5.87M
          ptr += MINBPC(enc);
1433
5.87M
          if (level == 0) {
1434
3.13k
            *nextTokPtr = ptr;
1435
3.13k
            return XML_TOK_IGNORE_SECT;
1436
3.13k
          }
1437
5.86M
          --level;
1438
5.86M
        }
1439
7.57M
      }
1440
11.4M
      break;
1441
113M
    default:
1442
113M
      ptr += MINBPC(enc);
1443
113M
      break;
1444
146M
    }
1445
146M
  }
1446
2.99k
  return XML_TOK_PARTIAL;
1447
10.0k
}
xmltok.c:little2_ignoreSectionTok
Line
Count
Source
1401
10.7k
                         const char **nextTokPtr) {
1402
10.7k
  int level = 0;
1403
10.7k
  if (MINBPC(enc) > 1) {
1404
10.7k
    size_t n = end - ptr;
1405
10.7k
    if (n & (MINBPC(enc) - 1)) {
1406
3.49k
      n &= ~(MINBPC(enc) - 1);
1407
3.49k
      end = ptr + n;
1408
3.49k
    }
1409
10.7k
  }
1410
94.6M
  while (HAS_CHAR(enc, ptr, end)) {
1411
94.6M
    switch (BYTE_TYPE(enc, ptr)) {
1412
5.19M
      INVALID_CASES(ptr, nextTokPtr)
1413
399k
    case BT_LT:
1414
399k
      ptr += MINBPC(enc);
1415
399k
      REQUIRE_CHAR(enc, ptr, end);
1416
398k
      if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) {
1417
216k
        ptr += MINBPC(enc);
1418
216k
        REQUIRE_CHAR(enc, ptr, end);
1419
216k
        if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) {
1420
172k
          ++level;
1421
172k
          ptr += MINBPC(enc);
1422
172k
        }
1423
216k
      }
1424
398k
      break;
1425
484k
    case BT_RSQB:
1426
484k
      ptr += MINBPC(enc);
1427
484k
      REQUIRE_CHAR(enc, ptr, end);
1428
484k
      if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
1429
207k
        ptr += MINBPC(enc);
1430
207k
        REQUIRE_CHAR(enc, ptr, end);
1431
207k
        if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
1432
96.4k
          ptr += MINBPC(enc);
1433
96.4k
          if (level == 0) {
1434
5.31k
            *nextTokPtr = ptr;
1435
5.31k
            return XML_TOK_IGNORE_SECT;
1436
5.31k
          }
1437
91.1k
          --level;
1438
91.1k
        }
1439
207k
      }
1440
478k
      break;
1441
91.1M
    default:
1442
91.1M
      ptr += MINBPC(enc);
1443
91.1M
      break;
1444
94.6M
    }
1445
94.6M
  }
1446
3.44k
  return XML_TOK_PARTIAL;
1447
10.7k
}
xmltok.c:big2_ignoreSectionTok
Line
Count
Source
1401
10.2k
                         const char **nextTokPtr) {
1402
10.2k
  int level = 0;
1403
10.2k
  if (MINBPC(enc) > 1) {
1404
10.2k
    size_t n = end - ptr;
1405
10.2k
    if (n & (MINBPC(enc) - 1)) {
1406
3.24k
      n &= ~(MINBPC(enc) - 1);
1407
3.24k
      end = ptr + n;
1408
3.24k
    }
1409
10.2k
  }
1410
81.0M
  while (HAS_CHAR(enc, ptr, end)) {
1411
81.0M
    switch (BYTE_TYPE(enc, ptr)) {
1412
5.83M
      INVALID_CASES(ptr, nextTokPtr)
1413
1.27M
    case BT_LT:
1414
1.27M
      ptr += MINBPC(enc);
1415
1.27M
      REQUIRE_CHAR(enc, ptr, end);
1416
1.27M
      if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) {
1417
1.09M
        ptr += MINBPC(enc);
1418
1.09M
        REQUIRE_CHAR(enc, ptr, end);
1419
1.09M
        if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) {
1420
987k
          ++level;
1421
987k
          ptr += MINBPC(enc);
1422
987k
        }
1423
1.09M
      }
1424
1.27M
      break;
1425
1.31M
    case BT_RSQB:
1426
1.31M
      ptr += MINBPC(enc);
1427
1.31M
      REQUIRE_CHAR(enc, ptr, end);
1428
1.31M
      if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
1429
681k
        ptr += MINBPC(enc);
1430
681k
        REQUIRE_CHAR(enc, ptr, end);
1431
681k
        if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
1432
395k
          ptr += MINBPC(enc);
1433
395k
          if (level == 0) {
1434
4.96k
            *nextTokPtr = ptr;
1435
4.96k
            return XML_TOK_IGNORE_SECT;
1436
4.96k
          }
1437
390k
          --level;
1438
390k
        }
1439
681k
      }
1440
1.31M
      break;
1441
75.5M
    default:
1442
75.5M
      ptr += MINBPC(enc);
1443
75.5M
      break;
1444
81.0M
    }
1445
81.0M
  }
1446
3.43k
  return XML_TOK_PARTIAL;
1447
10.2k
}
1448
1449
#  endif /* XML_DTD */
1450
1451
static int PTRCALL
1452
PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
1453
100k
                   const char **badPtr) {
1454
100k
  ptr += MINBPC(enc);
1455
100k
  end -= MINBPC(enc);
1456
9.25M
  for (; HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
1457
9.25M
    switch (BYTE_TYPE(enc, ptr)) {
1458
2.10M
    case BT_DIGIT:
1459
2.76M
    case BT_HEX:
1460
2.82M
    case BT_MINUS:
1461
2.85M
    case BT_APOS:
1462
2.87M
    case BT_LPAR:
1463
2.89M
    case BT_RPAR:
1464
2.92M
    case BT_PLUS:
1465
2.97M
    case BT_COMMA:
1466
3.00M
    case BT_SOL:
1467
3.01M
    case BT_EQUALS:
1468
3.03M
    case BT_QUEST:
1469
3.15M
    case BT_CR:
1470
3.27M
    case BT_LF:
1471
3.47M
    case BT_SEMI:
1472
3.49M
    case BT_EXCL:
1473
3.54M
    case BT_AST:
1474
3.69M
    case BT_PERCNT:
1475
3.73M
    case BT_NUM:
1476
3.73M
#  ifdef XML_NS
1477
3.82M
    case BT_COLON:
1478
3.82M
#  endif
1479
3.82M
      break;
1480
2.12M
    case BT_S:
1481
2.12M
      if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) {
1482
369
        *badPtr = ptr;
1483
369
        return 0;
1484
369
      }
1485
2.12M
      break;
1486
2.12M
    case BT_NAME:
1487
3.05M
    case BT_NMSTRT:
1488
3.05M
      if (! (BYTE_TO_ASCII(enc, ptr) & ~0x7f))
1489
3.05M
        break;
1490
697
      EXPAT_FALLTHROUGH;
1491
247k
    default:
1492
247k
      switch (BYTE_TO_ASCII(enc, ptr)) {
1493
21.1k
      case 0x24: /* $ */
1494
235k
      case 0x40: /* @ */
1495
235k
        break;
1496
11.6k
      default:
1497
11.6k
        *badPtr = ptr;
1498
11.6k
        return 0;
1499
247k
      }
1500
235k
      break;
1501
9.25M
    }
1502
9.25M
  }
1503
88.9k
  return 1;
1504
100k
}
xmltok.c:normal_isPublicId
Line
Count
Source
1453
61.9k
                   const char **badPtr) {
1454
61.9k
  ptr += MINBPC(enc);
1455
61.9k
  end -= MINBPC(enc);
1456
8.96M
  for (; HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
1457
8.96M
    switch (BYTE_TYPE(enc, ptr)) {
1458
2.09M
    case BT_DIGIT:
1459
2.73M
    case BT_HEX:
1460
2.78M
    case BT_MINUS:
1461
2.80M
    case BT_APOS:
1462
2.81M
    case BT_LPAR:
1463
2.82M
    case BT_RPAR:
1464
2.84M
    case BT_PLUS:
1465
2.87M
    case BT_COMMA:
1466
2.90M
    case BT_SOL:
1467
2.90M
    case BT_EQUALS:
1468
2.91M
    case BT_QUEST:
1469
3.03M
    case BT_CR:
1470
3.13M
    case BT_LF:
1471
3.31M
    case BT_SEMI:
1472
3.31M
    case BT_EXCL:
1473
3.36M
    case BT_AST:
1474
3.50M
    case BT_PERCNT:
1475
3.53M
    case BT_NUM:
1476
3.53M
#  ifdef XML_NS
1477
3.61M
    case BT_COLON:
1478
3.61M
#  endif
1479
3.61M
      break;
1480
2.11M
    case BT_S:
1481
2.11M
      if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) {
1482
268
        *badPtr = ptr;
1483
268
        return 0;
1484
268
      }
1485
2.11M
      break;
1486
2.11M
    case BT_NAME:
1487
3.01M
    case BT_NMSTRT:
1488
3.01M
      if (! (BYTE_TO_ASCII(enc, ptr) & ~0x7f))
1489
3.01M
        break;
1490
503
      EXPAT_FALLTHROUGH;
1491
219k
    default:
1492
219k
      switch (BYTE_TO_ASCII(enc, ptr)) {
1493
11.6k
      case 0x24: /* $ */
1494
215k
      case 0x40: /* @ */
1495
215k
        break;
1496
3.73k
      default:
1497
3.73k
        *badPtr = ptr;
1498
3.73k
        return 0;
1499
219k
      }
1500
215k
      break;
1501
8.96M
    }
1502
8.96M
  }
1503
57.9k
  return 1;
1504
61.9k
}
xmltok.c:little2_isPublicId
Line
Count
Source
1453
18.0k
                   const char **badPtr) {
1454
18.0k
  ptr += MINBPC(enc);
1455
18.0k
  end -= MINBPC(enc);
1456
141k
  for (; HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
1457
141k
    switch (BYTE_TYPE(enc, ptr)) {
1458
6.47k
    case BT_DIGIT:
1459
16.3k
    case BT_HEX:
1460
21.3k
    case BT_MINUS:
1461
24.1k
    case BT_APOS:
1462
29.9k
    case BT_LPAR:
1463
34.5k
    case BT_RPAR:
1464
38.4k
    case BT_PLUS:
1465
42.7k
    case BT_COMMA:
1466
46.6k
    case BT_SOL:
1467
52.5k
    case BT_EQUALS:
1468
55.9k
    case BT_QUEST:
1469
60.5k
    case BT_CR:
1470
67.5k
    case BT_LF:
1471
77.1k
    case BT_SEMI:
1472
82.6k
    case BT_EXCL:
1473
87.7k
    case BT_AST:
1474
92.6k
    case BT_PERCNT:
1475
96.7k
    case BT_NUM:
1476
96.7k
#  ifdef XML_NS
1477
100k
    case BT_COLON:
1478
100k
#  endif
1479
100k
      break;
1480
6.21k
    case BT_S:
1481
6.21k
      if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) {
1482
53
        *badPtr = ptr;
1483
53
        return 0;
1484
53
      }
1485
6.15k
      break;
1486
6.15k
    case BT_NAME:
1487
19.6k
    case BT_NMSTRT:
1488
19.6k
      if (! (BYTE_TO_ASCII(enc, ptr) & ~0x7f))
1489
19.5k
        break;
1490
64
      EXPAT_FALLTHROUGH;
1491
15.2k
    default:
1492
15.2k
      switch (BYTE_TO_ASCII(enc, ptr)) {
1493
4.88k
      case 0x24: /* $ */
1494
11.4k
      case 0x40: /* @ */
1495
11.4k
        break;
1496
3.83k
      default:
1497
3.83k
        *badPtr = ptr;
1498
3.83k
        return 0;
1499
15.2k
      }
1500
11.4k
      break;
1501
141k
    }
1502
141k
  }
1503
14.1k
  return 1;
1504
18.0k
}
xmltok.c:big2_isPublicId
Line
Count
Source
1453
20.9k
                   const char **badPtr) {
1454
20.9k
  ptr += MINBPC(enc);
1455
20.9k
  end -= MINBPC(enc);
1456
149k
  for (; HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
1457
149k
    switch (BYTE_TYPE(enc, ptr)) {
1458
8.17k
    case BT_DIGIT:
1459
19.1k
    case BT_HEX:
1460
24.8k
    case BT_MINUS:
1461
28.1k
    case BT_APOS:
1462
34.3k
    case BT_LPAR:
1463
39.2k
    case BT_RPAR:
1464
43.5k
    case BT_PLUS:
1465
48.2k
    case BT_COMMA:
1466
52.2k
    case BT_SOL:
1467
56.9k
    case BT_EQUALS:
1468
61.4k
    case BT_QUEST:
1469
66.5k
    case BT_CR:
1470
74.3k
    case BT_LF:
1471
82.1k
    case BT_SEMI:
1472
88.0k
    case BT_EXCL:
1473
93.2k
    case BT_AST:
1474
98.4k
    case BT_PERCNT:
1475
102k
    case BT_NUM:
1476
102k
#  ifdef XML_NS
1477
106k
    case BT_COLON:
1478
106k
#  endif
1479
106k
      break;
1480
7.49k
    case BT_S:
1481
7.49k
      if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) {
1482
48
        *badPtr = ptr;
1483
48
        return 0;
1484
48
      }
1485
7.44k
      break;
1486
7.44k
    case BT_NAME:
1487
22.5k
    case BT_NMSTRT:
1488
22.5k
      if (! (BYTE_TO_ASCII(enc, ptr) & ~0x7f))
1489
22.4k
        break;
1490
130
      EXPAT_FALLTHROUGH;
1491
13.1k
    default:
1492
13.1k
      switch (BYTE_TO_ASCII(enc, ptr)) {
1493
4.61k
      case 0x24: /* $ */
1494
9.05k
      case 0x40: /* @ */
1495
9.05k
        break;
1496
4.06k
      default:
1497
4.06k
        *badPtr = ptr;
1498
4.06k
        return 0;
1499
13.1k
      }
1500
9.05k
      break;
1501
149k
    }
1502
149k
  }
1503
16.8k
  return 1;
1504
20.9k
}
1505
1506
/* This must only be called for a well-formed start-tag or empty
1507
   element tag.  Returns the number of attributes.  Pointers to the
1508
   first attsMax attributes are stored in atts.
1509
*/
1510
1511
static int PTRCALL
1512
PREFIX(getAtts)(const ENCODING *enc, const char *ptr, int attsMax,
1513
252M
                ATTRIBUTE *atts) {
1514
252M
  enum { other, inName, inValue } state = inName;
1515
252M
  int nAtts = 0;
1516
252M
  int open = 0; /* defined when state == inValue;
1517
                   initialization just to shut up compilers */
1518
1519
4.41G
  for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
1520
4.41G
    switch (BYTE_TYPE(enc, ptr)) {
1521
0
#  define START_NAME                                                           \
1522
2.99G
    if (state == other) {                                                      \
1523
173M
      if (nAtts < attsMax) {                                                   \
1524
120M
        atts[nAtts].name = ptr;                                                \
1525
120M
        atts[nAtts].normalized = 1;                                            \
1526
120M
      }                                                                        \
1527
173M
      state = inName;                                                          \
1528
173M
    }
1529
0
#  define LEAD_CASE(n)                                                         \
1530
318M
  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
1531
318M
    START_NAME ptr += (n - MINBPC(enc));                                       \
1532
318M
    break;
1533
2.55M
      LEAD_CASE(2)
1534
272M
      LEAD_CASE(3)
1535
43.2M
      LEAD_CASE(4)
1536
0
#  undef LEAD_CASE
1537
1.37G
    case BT_NONASCII:
1538
2.27G
    case BT_NMSTRT:
1539
2.68G
    case BT_HEX:
1540
2.68G
      START_NAME
1541
2.68G
      break;
1542
0
#  undef START_NAME
1543
193M
    case BT_QUOT:
1544
193M
      if (state != inValue) {
1545
95.2M
        if (nAtts < attsMax)
1546
81.2M
          atts[nAtts].valuePtr = ptr + MINBPC(enc);
1547
95.2M
        state = inValue;
1548
95.2M
        open = BT_QUOT;
1549
98.4M
      } else if (open == BT_QUOT) {
1550
95.2M
        state = other;
1551
95.2M
        if (nAtts < attsMax)
1552
81.2M
          atts[nAtts].valueEnd = ptr;
1553
95.2M
        nAtts++;
1554
95.2M
      }
1555
193M
      break;
1556
159M
    case BT_APOS:
1557
159M
      if (state != inValue) {
1558
78.6M
        if (nAtts < attsMax)
1559
39.4M
          atts[nAtts].valuePtr = ptr + MINBPC(enc);
1560
78.6M
        state = inValue;
1561
78.6M
        open = BT_APOS;
1562
81.0M
      } else if (open == BT_APOS) {
1563
78.6M
        state = other;
1564
78.6M
        if (nAtts < attsMax)
1565
39.4M
          atts[nAtts].valueEnd = ptr;
1566
78.6M
        nAtts++;
1567
78.6M
      }
1568
159M
      break;
1569
6.06M
    case BT_AMP:
1570
6.06M
      if (nAtts < attsMax)
1571
5.81M
        atts[nAtts].normalized = 0;
1572
6.06M
      break;
1573
167M
    case BT_S:
1574
167M
      if (state == inName)
1575
24.1M
        state = other;
1576
142M
      else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized
1577
12.3M
               && (ptr == atts[nAtts].valuePtr
1578
2.84M
                   || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
1579
2.34M
                   || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
1580
1.62M
                   || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open))
1581
11.7M
        atts[nAtts].normalized = 0;
1582
167M
      break;
1583
81.0M
    case BT_CR:
1584
118M
    case BT_LF:
1585
      /* This case ensures that the first attribute name is counted
1586
         Apart from that we could just change state on the quote. */
1587
118M
      if (state == inName)
1588
1.25M
        state = other;
1589
117M
      else if (state == inValue && nAtts < attsMax)
1590
49.2M
        atts[nAtts].normalized = 0;
1591
118M
      break;
1592
231M
    case BT_GT:
1593
260M
    case BT_SOL:
1594
260M
      if (state != inValue)
1595
252M
        return nAtts;
1596
8.19M
      break;
1597
511M
    default:
1598
511M
      break;
1599
4.41G
    }
1600
4.41G
  }
1601
  /* not reached */
1602
252M
}
xmltok.c:normal_getAtts
Line
Count
Source
1513
252M
                ATTRIBUTE *atts) {
1514
252M
  enum { other, inName, inValue } state = inName;
1515
252M
  int nAtts = 0;
1516
252M
  int open = 0; /* defined when state == inValue;
1517
                   initialization just to shut up compilers */
1518
1519
2.76G
  for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
1520
2.76G
    switch (BYTE_TYPE(enc, ptr)) {
1521
0
#  define START_NAME                                                           \
1522
0
    if (state == other) {                                                      \
1523
0
      if (nAtts < attsMax) {                                                   \
1524
0
        atts[nAtts].name = ptr;                                                \
1525
0
        atts[nAtts].normalized = 1;                                            \
1526
0
      }                                                                        \
1527
0
      state = inName;                                                          \
1528
0
    }
1529
0
#  define LEAD_CASE(n)                                                         \
1530
0
  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
1531
0
    START_NAME ptr += (n - MINBPC(enc));                                       \
1532
0
    break;
1533
2.55M
      LEAD_CASE(2)
1534
272M
      LEAD_CASE(3)
1535
283k
      LEAD_CASE(4)
1536
0
#  undef LEAD_CASE
1537
0
    case BT_NONASCII:
1538
863M
    case BT_NMSTRT:
1539
1.25G
    case BT_HEX:
1540
1.25G
      START_NAME
1541
1.25G
      break;
1542
0
#  undef START_NAME
1543
150M
    case BT_QUOT:
1544
150M
      if (state != inValue) {
1545
74.9M
        if (nAtts < attsMax)
1546
70.9M
          atts[nAtts].valuePtr = ptr + MINBPC(enc);
1547
74.9M
        state = inValue;
1548
74.9M
        open = BT_QUOT;
1549
75.3M
      } else if (open == BT_QUOT) {
1550
74.9M
        state = other;
1551
74.9M
        if (nAtts < attsMax)
1552
70.9M
          atts[nAtts].valueEnd = ptr;
1553
74.9M
        nAtts++;
1554
74.9M
      }
1555
150M
      break;
1556
151M
    case BT_APOS:
1557
151M
      if (state != inValue) {
1558
74.4M
        if (nAtts < attsMax)
1559
37.2M
          atts[nAtts].valuePtr = ptr + MINBPC(enc);
1560
74.4M
        state = inValue;
1561
74.4M
        open = BT_APOS;
1562
76.5M
      } else if (open == BT_APOS) {
1563
74.4M
        state = other;
1564
74.4M
        if (nAtts < attsMax)
1565
37.2M
          atts[nAtts].valueEnd = ptr;
1566
74.4M
        nAtts++;
1567
74.4M
      }
1568
151M
      break;
1569
987k
    case BT_AMP:
1570
987k
      if (nAtts < attsMax)
1571
902k
        atts[nAtts].normalized = 0;
1572
987k
      break;
1573
151M
    case BT_S:
1574
151M
      if (state == inName)
1575
23.9M
        state = other;
1576
127M
      else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized
1577
9.88M
               && (ptr == atts[nAtts].valuePtr
1578
745k
                   || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
1579
404k
                   || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
1580
370k
                   || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open))
1581
9.75M
        atts[nAtts].normalized = 0;
1582
151M
      break;
1583
55.3M
    case BT_CR:
1584
61.2M
    case BT_LF:
1585
      /* This case ensures that the first attribute name is counted
1586
         Apart from that we could just change state on the quote. */
1587
61.2M
      if (state == inName)
1588
873k
        state = other;
1589
60.4M
      else if (state == inValue && nAtts < attsMax)
1590
13.9M
        atts[nAtts].normalized = 0;
1591
61.2M
      break;
1592
228M
    case BT_GT:
1593
256M
    case BT_SOL:
1594
256M
      if (state != inValue)
1595
252M
        return nAtts;
1596
4.98M
      break;
1597
461M
    default:
1598
461M
      break;
1599
2.76G
    }
1600
2.76G
  }
1601
  /* not reached */
1602
252M
}
xmltok.c:little2_getAtts
Line
Count
Source
1513
224k
                ATTRIBUTE *atts) {
1514
224k
  enum { other, inName, inValue } state = inName;
1515
224k
  int nAtts = 0;
1516
224k
  int open = 0; /* defined when state == inValue;
1517
                   initialization just to shut up compilers */
1518
1519
476M
  for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
1520
476M
    switch (BYTE_TYPE(enc, ptr)) {
1521
0
#  define START_NAME                                                           \
1522
0
    if (state == other) {                                                      \
1523
0
      if (nAtts < attsMax) {                                                   \
1524
0
        atts[nAtts].name = ptr;                                                \
1525
0
        atts[nAtts].normalized = 1;                                            \
1526
0
      }                                                                        \
1527
0
      state = inName;                                                          \
1528
0
    }
1529
0
#  define LEAD_CASE(n)                                                         \
1530
0
  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
1531
0
    START_NAME ptr += (n - MINBPC(enc));                                       \
1532
0
    break;
1533
0
      LEAD_CASE(2)
1534
0
      LEAD_CASE(3)
1535
18.2M
      LEAD_CASE(4)
1536
0
#  undef LEAD_CASE
1537
377M
    case BT_NONASCII:
1538
388M
    case BT_NMSTRT:
1539
394M
    case BT_HEX:
1540
394M
      START_NAME
1541
394M
      break;
1542
0
#  undef START_NAME
1543
6.45M
    case BT_QUOT:
1544
6.45M
      if (state != inValue) {
1545
3.06M
        if (nAtts < attsMax)
1546
1.57M
          atts[nAtts].valuePtr = ptr + MINBPC(enc);
1547
3.06M
        state = inValue;
1548
3.06M
        open = BT_QUOT;
1549
3.39M
      } else if (open == BT_QUOT) {
1550
3.06M
        state = other;
1551
3.06M
        if (nAtts < attsMax)
1552
1.57M
          atts[nAtts].valueEnd = ptr;
1553
3.06M
        nAtts++;
1554
3.06M
      }
1555
6.45M
      break;
1556
8.20M
    case BT_APOS:
1557
8.20M
      if (state != inValue) {
1558
3.94M
        if (nAtts < attsMax)
1559
2.00M
          atts[nAtts].valuePtr = ptr + MINBPC(enc);
1560
3.94M
        state = inValue;
1561
3.94M
        open = BT_APOS;
1562
4.26M
      } else if (open == BT_APOS) {
1563
3.94M
        state = other;
1564
3.94M
        if (nAtts < attsMax)
1565
2.00M
          atts[nAtts].valueEnd = ptr;
1566
3.94M
        nAtts++;
1567
3.94M
      }
1568
8.20M
      break;
1569
1.66M
    case BT_AMP:
1570
1.66M
      if (nAtts < attsMax)
1571
1.55M
        atts[nAtts].normalized = 0;
1572
1.66M
      break;
1573
14.8M
    case BT_S:
1574
14.8M
      if (state == inName)
1575
191k
        state = other;
1576
14.7M
      else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized
1577
2.31M
               && (ptr == atts[nAtts].valuePtr
1578
1.94M
                   || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
1579
1.85M
                   || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
1580
1.18M
                   || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open))
1581
1.81M
        atts[nAtts].normalized = 0;
1582
14.8M
      break;
1583
10.0M
    case BT_CR:
1584
11.3M
    case BT_LF:
1585
      /* This case ensures that the first attribute name is counted
1586
         Apart from that we could just change state on the quote. */
1587
11.3M
      if (state == inName)
1588
154k
        state = other;
1589
11.1M
      else if (state == inValue && nAtts < attsMax)
1590
7.66M
        atts[nAtts].normalized = 0;
1591
11.3M
      break;
1592
2.36M
    case BT_GT:
1593
2.76M
    case BT_SOL:
1594
2.76M
      if (state != inValue)
1595
224k
        return nAtts;
1596
2.53M
      break;
1597
19.0M
    default:
1598
19.0M
      break;
1599
476M
    }
1600
476M
  }
1601
  /* not reached */
1602
224k
}
xmltok.c:big2_getAtts
Line
Count
Source
1513
268k
                ATTRIBUTE *atts) {
1514
268k
  enum { other, inName, inValue } state = inName;
1515
268k
  int nAtts = 0;
1516
268k
  int open = 0; /* defined when state == inValue;
1517
                   initialization just to shut up compilers */
1518
1519
1.17G
  for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
1520
1.17G
    switch (BYTE_TYPE(enc, ptr)) {
1521
0
#  define START_NAME                                                           \
1522
0
    if (state == other) {                                                      \
1523
0
      if (nAtts < attsMax) {                                                   \
1524
0
        atts[nAtts].name = ptr;                                                \
1525
0
        atts[nAtts].normalized = 1;                                            \
1526
0
      }                                                                        \
1527
0
      state = inName;                                                          \
1528
0
    }
1529
0
#  define LEAD_CASE(n)                                                         \
1530
0
  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
1531
0
    START_NAME ptr += (n - MINBPC(enc));                                       \
1532
0
    break;
1533
0
      LEAD_CASE(2)
1534
0
      LEAD_CASE(3)
1535
24.7M
      LEAD_CASE(4)
1536
0
#  undef LEAD_CASE
1537
996M
    case BT_NONASCII:
1538
1.02G
    case BT_NMSTRT:
1539
1.03G
    case BT_HEX:
1540
1.03G
      START_NAME
1541
1.03G
      break;
1542
0
#  undef START_NAME
1543
37.0M
    case BT_QUOT:
1544
37.0M
      if (state != inValue) {
1545
17.3M
        if (nAtts < attsMax)
1546
8.70M
          atts[nAtts].valuePtr = ptr + MINBPC(enc);
1547
17.3M
        state = inValue;
1548
17.3M
        open = BT_QUOT;
1549
19.7M
      } else if (open == BT_QUOT) {
1550
17.3M
        state = other;
1551
17.3M
        if (nAtts < attsMax)
1552
8.70M
          atts[nAtts].valueEnd = ptr;
1553
17.3M
        nAtts++;
1554
17.3M
      }
1555
37.0M
      break;
1556
536k
    case BT_APOS:
1557
536k
      if (state != inValue) {
1558
256k
        if (nAtts < attsMax)
1559
178k
          atts[nAtts].valuePtr = ptr + MINBPC(enc);
1560
256k
        state = inValue;
1561
256k
        open = BT_APOS;
1562
279k
      } else if (open == BT_APOS) {
1563
256k
        state = other;
1564
256k
        if (nAtts < attsMax)
1565
178k
          atts[nAtts].valueEnd = ptr;
1566
256k
        nAtts++;
1567
256k
      }
1568
536k
      break;
1569
3.41M
    case BT_AMP:
1570
3.41M
      if (nAtts < attsMax)
1571
3.36M
        atts[nAtts].normalized = 0;
1572
3.41M
      break;
1573
1.25M
    case BT_S:
1574
1.25M
      if (state == inName)
1575
72.2k
        state = other;
1576
1.18M
      else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized
1577
191k
               && (ptr == atts[nAtts].valuePtr
1578
150k
                   || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
1579
87.2k
                   || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
1580
69.6k
                   || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open))
1581
136k
        atts[nAtts].normalized = 0;
1582
1.25M
      break;
1583
15.6M
    case BT_CR:
1584
45.6M
    case BT_LF:
1585
      /* This case ensures that the first attribute name is counted
1586
         Apart from that we could just change state on the quote. */
1587
45.6M
      if (state == inName)
1588
224k
        state = other;
1589
45.4M
      else if (state == inValue && nAtts < attsMax)
1590
27.6M
        atts[nAtts].normalized = 0;
1591
45.6M
      break;
1592
510k
    case BT_GT:
1593
938k
    case BT_SOL:
1594
938k
      if (state != inValue)
1595
268k
        return nAtts;
1596
669k
      break;
1597
31.4M
    default:
1598
31.4M
      break;
1599
1.17G
    }
1600
1.17G
  }
1601
  /* not reached */
1602
268k
}
1603
1604
static int PTRFASTCALL
1605
1.35M
PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) {
1606
1.35M
  int result = 0;
1607
  /* skip &# */
1608
1.35M
  UNUSED_P(enc);
1609
1.35M
  ptr += 2 * MINBPC(enc);
1610
1.35M
  if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
1611
5.24M
    for (ptr += MINBPC(enc); ! CHAR_MATCHES(enc, ptr, ASCII_SEMI);
1612
4.08M
         ptr += MINBPC(enc)) {
1613
4.08M
      int c = BYTE_TO_ASCII(enc, ptr);
1614
4.08M
      switch (c) {
1615
197k
      case ASCII_0:
1616
457k
      case ASCII_1:
1617
810k
      case ASCII_2:
1618
938k
      case ASCII_3:
1619
1.20M
      case ASCII_4:
1620
1.85M
      case ASCII_5:
1621
2.00M
      case ASCII_6:
1622
2.12M
      case ASCII_7:
1623
2.27M
      case ASCII_8:
1624
2.42M
      case ASCII_9:
1625
2.42M
        result <<= 4;
1626
2.42M
        result |= (c - ASCII_0);
1627
2.42M
        break;
1628
29.1k
      case ASCII_A:
1629
551k
      case ASCII_B:
1630
576k
      case ASCII_C:
1631
694k
      case ASCII_D:
1632
725k
      case ASCII_E:
1633
770k
      case ASCII_F:
1634
770k
        result <<= 4;
1635
770k
        result += 10 + (c - ASCII_A);
1636
770k
        break;
1637
102k
      case ASCII_a:
1638
189k
      case ASCII_b:
1639
290k
      case ASCII_c:
1640
333k
      case ASCII_d:
1641
381k
      case ASCII_e:
1642
888k
      case ASCII_f:
1643
888k
        result <<= 4;
1644
888k
        result += 10 + (c - ASCII_a);
1645
888k
        break;
1646
4.08M
      }
1647
4.08M
      if (result >= 0x110000)
1648
1.18k
        return -1;
1649
4.08M
    }
1650
1.16M
  } else {
1651
770k
    for (; ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
1652
579k
      int c = BYTE_TO_ASCII(enc, ptr);
1653
579k
      result *= 10;
1654
579k
      result += (c - ASCII_0);
1655
579k
      if (result >= 0x110000)
1656
571
        return -1;
1657
579k
    }
1658
190k
  }
1659
1.35M
  return checkCharRefNumber(result);
1660
1.35M
}
xmltok.c:normal_charRefNumber
Line
Count
Source
1605
225k
PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) {
1606
225k
  int result = 0;
1607
  /* skip &# */
1608
225k
  UNUSED_P(enc);
1609
225k
  ptr += 2 * MINBPC(enc);
1610
225k
  if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
1611
872k
    for (ptr += MINBPC(enc); ! CHAR_MATCHES(enc, ptr, ASCII_SEMI);
1612
691k
         ptr += MINBPC(enc)) {
1613
691k
      int c = BYTE_TO_ASCII(enc, ptr);
1614
691k
      switch (c) {
1615
76.9k
      case ASCII_0:
1616
86.9k
      case ASCII_1:
1617
189k
      case ASCII_2:
1618
235k
      case ASCII_3:
1619
253k
      case ASCII_4:
1620
290k
      case ASCII_5:
1621
318k
      case ASCII_6:
1622
324k
      case ASCII_7:
1623
357k
      case ASCII_8:
1624
399k
      case ASCII_9:
1625
399k
        result <<= 4;
1626
399k
        result |= (c - ASCII_0);
1627
399k
        break;
1628
8.30k
      case ASCII_A:
1629
13.8k
      case ASCII_B:
1630
17.7k
      case ASCII_C:
1631
73.3k
      case ASCII_D:
1632
81.0k
      case ASCII_E:
1633
101k
      case ASCII_F:
1634
101k
        result <<= 4;
1635
101k
        result += 10 + (c - ASCII_A);
1636
101k
        break;
1637
5.30k
      case ASCII_a:
1638
40.6k
      case ASCII_b:
1639
130k
      case ASCII_c:
1640
139k
      case ASCII_d:
1641
159k
      case ASCII_e:
1642
191k
      case ASCII_f:
1643
191k
        result <<= 4;
1644
191k
        result += 10 + (c - ASCII_a);
1645
191k
        break;
1646
691k
      }
1647
691k
      if (result >= 0x110000)
1648
263
        return -1;
1649
691k
    }
1650
181k
  } else {
1651
183k
    for (; ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
1652
140k
      int c = BYTE_TO_ASCII(enc, ptr);
1653
140k
      result *= 10;
1654
140k
      result += (c - ASCII_0);
1655
140k
      if (result >= 0x110000)
1656
162
        return -1;
1657
140k
    }
1658
43.7k
  }
1659
224k
  return checkCharRefNumber(result);
1660
225k
}
xmltok.c:little2_charRefNumber
Line
Count
Source
1605
539k
PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) {
1606
539k
  int result = 0;
1607
  /* skip &# */
1608
539k
  UNUSED_P(enc);
1609
539k
  ptr += 2 * MINBPC(enc);
1610
539k
  if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
1611
2.09M
    for (ptr += MINBPC(enc); ! CHAR_MATCHES(enc, ptr, ASCII_SEMI);
1612
1.60M
         ptr += MINBPC(enc)) {
1613
1.60M
      int c = BYTE_TO_ASCII(enc, ptr);
1614
1.60M
      switch (c) {
1615
72.9k
      case ASCII_0:
1616
148k
      case ASCII_1:
1617
296k
      case ASCII_2:
1618
326k
      case ASCII_3:
1619
462k
      case ASCII_4:
1620
810k
      case ASCII_5:
1621
864k
      case ASCII_6:
1622
904k
      case ASCII_7:
1623
976k
      case ASCII_8:
1624
997k
      case ASCII_9:
1625
997k
        result <<= 4;
1626
997k
        result |= (c - ASCII_0);
1627
997k
        break;
1628
5.39k
      case ASCII_A:
1629
245k
      case ASCII_B:
1630
252k
      case ASCII_C:
1631
263k
      case ASCII_D:
1632
279k
      case ASCII_E:
1633
296k
      case ASCII_F:
1634
296k
        result <<= 4;
1635
296k
        result += 10 + (c - ASCII_A);
1636
296k
        break;
1637
66.6k
      case ASCII_a:
1638
84.2k
      case ASCII_b:
1639
89.6k
      case ASCII_c:
1640
105k
      case ASCII_d:
1641
118k
      case ASCII_e:
1642
312k
      case ASCII_f:
1643
312k
        result <<= 4;
1644
312k
        result += 10 + (c - ASCII_a);
1645
312k
        break;
1646
1.60M
      }
1647
1.60M
      if (result >= 0x110000)
1648
338
        return -1;
1649
1.60M
    }
1650
491k
  } else {
1651
187k
    for (; ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
1652
139k
      int c = BYTE_TO_ASCII(enc, ptr);
1653
139k
      result *= 10;
1654
139k
      result += (c - ASCII_0);
1655
139k
      if (result >= 0x110000)
1656
295
        return -1;
1657
139k
    }
1658
47.8k
  }
1659
539k
  return checkCharRefNumber(result);
1660
539k
}
xmltok.c:big2_charRefNumber
Line
Count
Source
1605
590k
PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) {
1606
590k
  int result = 0;
1607
  /* skip &# */
1608
590k
  UNUSED_P(enc);
1609
590k
  ptr += 2 * MINBPC(enc);
1610
590k
  if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
1611
2.27M
    for (ptr += MINBPC(enc); ! CHAR_MATCHES(enc, ptr, ASCII_SEMI);
1612
1.78M
         ptr += MINBPC(enc)) {
1613
1.78M
      int c = BYTE_TO_ASCII(enc, ptr);
1614
1.78M
      switch (c) {
1615
47.2k
      case ASCII_0:
1616
222k
      case ASCII_1:
1617
323k
      case ASCII_2:
1618
376k
      case ASCII_3:
1619
484k
      case ASCII_4:
1620
759k
      case ASCII_5:
1621
820k
      case ASCII_6:
1622
892k
      case ASCII_7:
1623
937k
      case ASCII_8:
1624
1.02M
      case ASCII_9:
1625
1.02M
        result <<= 4;
1626
1.02M
        result |= (c - ASCII_0);
1627
1.02M
        break;
1628
15.4k
      case ASCII_A:
1629
291k
      case ASCII_B:
1630
305k
      case ASCII_C:
1631
357k
      case ASCII_D:
1632
364k
      case ASCII_E:
1633
372k
      case ASCII_F:
1634
372k
        result <<= 4;
1635
372k
        result += 10 + (c - ASCII_A);
1636
372k
        break;
1637
30.1k
      case ASCII_a:
1638
64.4k
      case ASCII_b:
1639
70.4k
      case ASCII_c:
1640
89.4k
      case ASCII_d:
1641
103k
      case ASCII_e:
1642
384k
      case ASCII_f:
1643
384k
        result <<= 4;
1644
384k
        result += 10 + (c - ASCII_a);
1645
384k
        break;
1646
1.78M
      }
1647
1.78M
      if (result >= 0x110000)
1648
587
        return -1;
1649
1.78M
    }
1650
491k
  } else {
1651
399k
    for (; ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
1652
300k
      int c = BYTE_TO_ASCII(enc, ptr);
1653
300k
      result *= 10;
1654
300k
      result += (c - ASCII_0);
1655
300k
      if (result >= 0x110000)
1656
114
        return -1;
1657
300k
    }
1658
99.0k
  }
1659
589k
  return checkCharRefNumber(result);
1660
590k
}
1661
1662
static int PTRCALL
1663
PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr,
1664
124M
                             const char *end) {
1665
124M
  UNUSED_P(enc);
1666
124M
  switch ((end - ptr) / MINBPC(enc)) {
1667
9.26M
  case 2:
1668
9.26M
    if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
1669
8.97M
      switch (BYTE_TO_ASCII(enc, ptr)) {
1670
7.32M
      case ASCII_l:
1671
7.32M
        return ASCII_LT;
1672
1.61M
      case ASCII_g:
1673
1.61M
        return ASCII_GT;
1674
8.97M
      }
1675
8.97M
    }
1676
327k
    break;
1677
327k
  case 3:
1678
246k
    if (CHAR_MATCHES(enc, ptr, ASCII_a)) {
1679
203k
      ptr += MINBPC(enc);
1680
203k
      if (CHAR_MATCHES(enc, ptr, ASCII_m)) {
1681
176k
        ptr += MINBPC(enc);
1682
176k
        if (CHAR_MATCHES(enc, ptr, ASCII_p))
1683
162k
          return ASCII_AMP;
1684
176k
      }
1685
203k
    }
1686
84.3k
    break;
1687
11.4M
  case 4:
1688
11.4M
    switch (BYTE_TO_ASCII(enc, ptr)) {
1689
487k
    case ASCII_q:
1690
487k
      ptr += MINBPC(enc);
1691
487k
      if (CHAR_MATCHES(enc, ptr, ASCII_u)) {
1692
455k
        ptr += MINBPC(enc);
1693
455k
        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
1694
440k
          ptr += MINBPC(enc);
1695
440k
          if (CHAR_MATCHES(enc, ptr, ASCII_t))
1696
427k
            return ASCII_QUOT;
1697
440k
        }
1698
455k
      }
1699
59.2k
      break;
1700
10.6M
    case ASCII_a:
1701
10.6M
      ptr += MINBPC(enc);
1702
10.6M
      if (CHAR_MATCHES(enc, ptr, ASCII_p)) {
1703
10.5M
        ptr += MINBPC(enc);
1704
10.5M
        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
1705
10.5M
          ptr += MINBPC(enc);
1706
10.5M
          if (CHAR_MATCHES(enc, ptr, ASCII_s))
1707
10.5M
            return ASCII_APOS;
1708
10.5M
        }
1709
10.5M
      }
1710
52.1k
      break;
1711
11.4M
    }
1712
124M
  }
1713
104M
  return 0;
1714
124M
}
xmltok.c:normal_predefinedEntityName
Line
Count
Source
1664
120M
                             const char *end) {
1665
120M
  UNUSED_P(enc);
1666
120M
  switch ((end - ptr) / MINBPC(enc)) {
1667
9.17M
  case 2:
1668
9.17M
    if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
1669
8.91M
      switch (BYTE_TO_ASCII(enc, ptr)) {
1670
7.26M
      case ASCII_l:
1671
7.26M
        return ASCII_LT;
1672
1.61M
      case ASCII_g:
1673
1.61M
        return ASCII_GT;
1674
8.91M
      }
1675
8.91M
    }
1676
300k
    break;
1677
300k
  case 3:
1678
199k
    if (CHAR_MATCHES(enc, ptr, ASCII_a)) {
1679
172k
      ptr += MINBPC(enc);
1680
172k
      if (CHAR_MATCHES(enc, ptr, ASCII_m)) {
1681
157k
        ptr += MINBPC(enc);
1682
157k
        if (CHAR_MATCHES(enc, ptr, ASCII_p))
1683
154k
          return ASCII_AMP;
1684
157k
      }
1685
172k
    }
1686
44.2k
    break;
1687
11.2M
  case 4:
1688
11.2M
    switch (BYTE_TO_ASCII(enc, ptr)) {
1689
438k
    case ASCII_q:
1690
438k
      ptr += MINBPC(enc);
1691
438k
      if (CHAR_MATCHES(enc, ptr, ASCII_u)) {
1692
421k
        ptr += MINBPC(enc);
1693
421k
        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
1694
419k
          ptr += MINBPC(enc);
1695
419k
          if (CHAR_MATCHES(enc, ptr, ASCII_t))
1696
416k
            return ASCII_QUOT;
1697
419k
        }
1698
421k
      }
1699
22.3k
      break;
1700
10.4M
    case ASCII_a:
1701
10.4M
      ptr += MINBPC(enc);
1702
10.4M
      if (CHAR_MATCHES(enc, ptr, ASCII_p)) {
1703
10.4M
        ptr += MINBPC(enc);
1704
10.4M
        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
1705
10.4M
          ptr += MINBPC(enc);
1706
10.4M
          if (CHAR_MATCHES(enc, ptr, ASCII_s))
1707
10.4M
            return ASCII_APOS;
1708
10.4M
        }
1709
10.4M
      }
1710
10.2k
      break;
1711
11.2M
    }
1712
120M
  }
1713
100M
  return 0;
1714
120M
}
xmltok.c:little2_predefinedEntityName
Line
Count
Source
1664
1.31M
                             const char *end) {
1665
1.31M
  UNUSED_P(enc);
1666
1.31M
  switch ((end - ptr) / MINBPC(enc)) {
1667
69.5k
  case 2:
1668
69.5k
    if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
1669
58.4k
      switch (BYTE_TO_ASCII(enc, ptr)) {
1670
53.3k
      case ASCII_l:
1671
53.3k
        return ASCII_LT;
1672
2.46k
      case ASCII_g:
1673
2.46k
        return ASCII_GT;
1674
58.4k
      }
1675
58.4k
    }
1676
13.6k
    break;
1677
25.2k
  case 3:
1678
25.2k
    if (CHAR_MATCHES(enc, ptr, ASCII_a)) {
1679
16.3k
      ptr += MINBPC(enc);
1680
16.3k
      if (CHAR_MATCHES(enc, ptr, ASCII_m)) {
1681
9.99k
        ptr += MINBPC(enc);
1682
9.99k
        if (CHAR_MATCHES(enc, ptr, ASCII_p))
1683
4.58k
          return ASCII_AMP;
1684
9.99k
      }
1685
16.3k
    }
1686
20.6k
    break;
1687
148k
  case 4:
1688
148k
    switch (BYTE_TO_ASCII(enc, ptr)) {
1689
21.5k
    case ASCII_q:
1690
21.5k
      ptr += MINBPC(enc);
1691
21.5k
      if (CHAR_MATCHES(enc, ptr, ASCII_u)) {
1692
14.6k
        ptr += MINBPC(enc);
1693
14.6k
        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
1694
9.07k
          ptr += MINBPC(enc);
1695
9.07k
          if (CHAR_MATCHES(enc, ptr, ASCII_t))
1696
4.87k
            return ASCII_QUOT;
1697
9.07k
        }
1698
14.6k
      }
1699
16.6k
      break;
1700
122k
    case ASCII_a:
1701
122k
      ptr += MINBPC(enc);
1702
122k
      if (CHAR_MATCHES(enc, ptr, ASCII_p)) {
1703
114k
        ptr += MINBPC(enc);
1704
114k
        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
1705
108k
          ptr += MINBPC(enc);
1706
108k
          if (CHAR_MATCHES(enc, ptr, ASCII_s))
1707
100k
            return ASCII_APOS;
1708
108k
        }
1709
114k
      }
1710
22.5k
      break;
1711
148k
    }
1712
1.31M
  }
1713
1.14M
  return 0;
1714
1.31M
}
xmltok.c:big2_predefinedEntityName
Line
Count
Source
1664
2.98M
                             const char *end) {
1665
2.98M
  UNUSED_P(enc);
1666
2.98M
  switch ((end - ptr) / MINBPC(enc)) {
1667
17.7k
  case 2:
1668
17.7k
    if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
1669
6.93k
      switch (BYTE_TO_ASCII(enc, ptr)) {
1670
3.47k
      case ASCII_l:
1671
3.47k
        return ASCII_LT;
1672
1.41k
      case ASCII_g:
1673
1.41k
        return ASCII_GT;
1674
6.93k
      }
1675
6.93k
    }
1676
12.8k
    break;
1677
22.3k
  case 3:
1678
22.3k
    if (CHAR_MATCHES(enc, ptr, ASCII_a)) {
1679
14.5k
      ptr += MINBPC(enc);
1680
14.5k
      if (CHAR_MATCHES(enc, ptr, ASCII_m)) {
1681
8.17k
        ptr += MINBPC(enc);
1682
8.17k
        if (CHAR_MATCHES(enc, ptr, ASCII_p))
1683
2.80k
          return ASCII_AMP;
1684
8.17k
      }
1685
14.5k
    }
1686
19.5k
    break;
1687
55.6k
  case 4:
1688
55.6k
    switch (BYTE_TO_ASCII(enc, ptr)) {
1689
26.7k
    case ASCII_q:
1690
26.7k
      ptr += MINBPC(enc);
1691
26.7k
      if (CHAR_MATCHES(enc, ptr, ASCII_u)) {
1692
19.2k
        ptr += MINBPC(enc);
1693
19.2k
        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
1694
12.5k
          ptr += MINBPC(enc);
1695
12.5k
          if (CHAR_MATCHES(enc, ptr, ASCII_t))
1696
6.50k
            return ASCII_QUOT;
1697
12.5k
        }
1698
19.2k
      }
1699
20.2k
      break;
1700
22.7k
    case ASCII_a:
1701
22.7k
      ptr += MINBPC(enc);
1702
22.7k
      if (CHAR_MATCHES(enc, ptr, ASCII_p)) {
1703
16.3k
        ptr += MINBPC(enc);
1704
16.3k
        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
1705
10.4k
          ptr += MINBPC(enc);
1706
10.4k
          if (CHAR_MATCHES(enc, ptr, ASCII_s))
1707
3.33k
            return ASCII_APOS;
1708
10.4k
        }
1709
16.3k
      }
1710
19.4k
      break;
1711
55.6k
    }
1712
2.98M
  }
1713
2.96M
  return 0;
1714
2.98M
}
1715
1716
static int PTRCALL
1717
PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1,
1718
3.27M
                         const char *end1, const char *ptr2) {
1719
3.27M
  UNUSED_P(enc);
1720
15.0M
  for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
1721
13.2M
    if (end1 - ptr1 < MINBPC(enc)) {
1722
      /* This line cannot be executed.  The incoming data has already
1723
       * been tokenized once, so incomplete characters like this have
1724
       * already been eliminated from the input.  Retaining the
1725
       * paranoia check is still valuable, however.
1726
       */
1727
5.93k
      return 0; /* LCOV_EXCL_LINE */
1728
5.93k
    }
1729
13.2M
    if (! CHAR_MATCHES(enc, ptr1, *ptr2))
1730
1.48M
      return 0;
1731
13.2M
  }
1732
1.78M
  return ptr1 == end1;
1733
3.27M
}
xmltok.c:normal_nameMatchesAscii
Line
Count
Source
1718
2.49M
                         const char *end1, const char *ptr2) {
1719
2.49M
  UNUSED_P(enc);
1720
12.0M
  for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
1721
10.6M
    if (end1 - ptr1 < MINBPC(enc)) {
1722
      /* This line cannot be executed.  The incoming data has already
1723
       * been tokenized once, so incomplete characters like this have
1724
       * already been eliminated from the input.  Retaining the
1725
       * paranoia check is still valuable, however.
1726
       */
1727
1.82k
      return 0; /* LCOV_EXCL_LINE */
1728
1.82k
    }
1729
10.6M
    if (! CHAR_MATCHES(enc, ptr1, *ptr2))
1730
1.08M
      return 0;
1731
10.6M
  }
1732
1.41M
  return ptr1 == end1;
1733
2.49M
}
xmltok.c:little2_nameMatchesAscii
Line
Count
Source
1718
353k
                         const char *end1, const char *ptr2) {
1719
353k
  UNUSED_P(enc);
1720
1.41M
  for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
1721
1.24M
    if (end1 - ptr1 < MINBPC(enc)) {
1722
      /* This line cannot be executed.  The incoming data has already
1723
       * been tokenized once, so incomplete characters like this have
1724
       * already been eliminated from the input.  Retaining the
1725
       * paranoia check is still valuable, however.
1726
       */
1727
2.00k
      return 0; /* LCOV_EXCL_LINE */
1728
2.00k
    }
1729
1.24M
    if (! CHAR_MATCHES(enc, ptr1, *ptr2))
1730
184k
      return 0;
1731
1.24M
  }
1732
167k
  return ptr1 == end1;
1733
353k
}
xmltok.c:big2_nameMatchesAscii
Line
Count
Source
1718
428k
                         const char *end1, const char *ptr2) {
1719
428k
  UNUSED_P(enc);
1720
1.59M
  for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
1721
1.38M
    if (end1 - ptr1 < MINBPC(enc)) {
1722
      /* This line cannot be executed.  The incoming data has already
1723
       * been tokenized once, so incomplete characters like this have
1724
       * already been eliminated from the input.  Retaining the
1725
       * paranoia check is still valuable, however.
1726
       */
1727
2.10k
      return 0; /* LCOV_EXCL_LINE */
1728
2.10k
    }
1729
1.38M
    if (! CHAR_MATCHES(enc, ptr1, *ptr2))
1730
223k
      return 0;
1731
1.38M
  }
1732
202k
  return ptr1 == end1;
1733
428k
}
1734
1735
static int PTRFASTCALL
1736
320M
PREFIX(nameLength)(const ENCODING *enc, const char *ptr) {
1737
320M
  const char *start = ptr;
1738
1.56G
  for (;;) {
1739
1.56G
    switch (BYTE_TYPE(enc, ptr)) {
1740
0
#  define LEAD_CASE(n)                                                         \
1741
3.97M
  case BT_LEAD##n:                                                             \
1742
3.97M
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1743
3.97M
    break;
1744
3.61M
      LEAD_CASE(2)
1745
359k
      LEAD_CASE(3)
1746
0
      LEAD_CASE(4)
1747
0
#  undef LEAD_CASE
1748
12.4M
    case BT_NONASCII:
1749
683M
    case BT_NMSTRT:
1750
683M
#  ifdef XML_NS
1751
710M
    case BT_COLON:
1752
710M
#  endif
1753
1.06G
    case BT_HEX:
1754
1.19G
    case BT_DIGIT:
1755
1.21G
    case BT_NAME:
1756
1.24G
    case BT_MINUS:
1757
1.24G
      ptr += MINBPC(enc);
1758
1.24G
      break;
1759
320M
    default:
1760
320M
      return (int)(ptr - start);
1761
1.56G
    }
1762
1.56G
  }
1763
320M
}
xmltok.c:normal_nameLength
Line
Count
Source
1736
319M
PREFIX(nameLength)(const ENCODING *enc, const char *ptr) {
1737
319M
  const char *start = ptr;
1738
1.55G
  for (;;) {
1739
1.55G
    switch (BYTE_TYPE(enc, ptr)) {
1740
0
#  define LEAD_CASE(n)                                                         \
1741
0
  case BT_LEAD##n:                                                             \
1742
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1743
0
    break;
1744
3.61M
      LEAD_CASE(2)
1745
359k
      LEAD_CASE(3)
1746
0
      LEAD_CASE(4)
1747
0
#  undef LEAD_CASE
1748
0
    case BT_NONASCII:
1749
670M
    case BT_NMSTRT:
1750
670M
#  ifdef XML_NS
1751
697M
    case BT_COLON:
1752
697M
#  endif
1753
1.04G
    case BT_HEX:
1754
1.18G
    case BT_DIGIT:
1755
1.19G
    case BT_NAME:
1756
1.22G
    case BT_MINUS:
1757
1.22G
      ptr += MINBPC(enc);
1758
1.22G
      break;
1759
319M
    default:
1760
319M
      return (int)(ptr - start);
1761
1.55G
    }
1762
1.55G
  }
1763
319M
}
xmltok.c:little2_nameLength
Line
Count
Source
1736
318k
PREFIX(nameLength)(const ENCODING *enc, const char *ptr) {
1737
318k
  const char *start = ptr;
1738
3.33M
  for (;;) {
1739
3.33M
    switch (BYTE_TYPE(enc, ptr)) {
1740
0
#  define LEAD_CASE(n)                                                         \
1741
0
  case BT_LEAD##n:                                                             \
1742
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1743
0
    break;
1744
0
      LEAD_CASE(2)
1745
0
      LEAD_CASE(3)
1746
0
      LEAD_CASE(4)
1747
0
#  undef LEAD_CASE
1748
2.60M
    case BT_NONASCII:
1749
2.92M
    case BT_NMSTRT:
1750
2.92M
#  ifdef XML_NS
1751
2.93M
    case BT_COLON:
1752
2.93M
#  endif
1753
3.00M
    case BT_HEX:
1754
3.00M
    case BT_DIGIT:
1755
3.01M
    case BT_NAME:
1756
3.01M
    case BT_MINUS:
1757
3.01M
      ptr += MINBPC(enc);
1758
3.01M
      break;
1759
318k
    default:
1760
318k
      return (int)(ptr - start);
1761
3.33M
    }
1762
3.33M
  }
1763
318k
}
xmltok.c:big2_nameLength
Line
Count
Source
1736
408k
PREFIX(nameLength)(const ENCODING *enc, const char *ptr) {
1737
408k
  const char *start = ptr;
1738
10.7M
  for (;;) {
1739
10.7M
    switch (BYTE_TYPE(enc, ptr)) {
1740
0
#  define LEAD_CASE(n)                                                         \
1741
0
  case BT_LEAD##n:                                                             \
1742
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1743
0
    break;
1744
0
      LEAD_CASE(2)
1745
0
      LEAD_CASE(3)
1746
0
      LEAD_CASE(4)
1747
0
#  undef LEAD_CASE
1748
9.80M
    case BT_NONASCII:
1749
10.1M
    case BT_NMSTRT:
1750
10.1M
#  ifdef XML_NS
1751
10.2M
    case BT_COLON:
1752
10.2M
#  endif
1753
10.3M
    case BT_HEX:
1754
10.3M
    case BT_DIGIT:
1755
10.3M
    case BT_NAME:
1756
10.3M
    case BT_MINUS:
1757
10.3M
      ptr += MINBPC(enc);
1758
10.3M
      break;
1759
408k
    default:
1760
408k
      return (int)(ptr - start);
1761
10.7M
    }
1762
10.7M
  }
1763
408k
}
1764
1765
static const char *PTRFASTCALL
1766
16.8k
PREFIX(skipS)(const ENCODING *enc, const char *ptr) {
1767
31.9k
  for (;;) {
1768
31.9k
    switch (BYTE_TYPE(enc, ptr)) {
1769
1.74k
    case BT_LF:
1770
6.55k
    case BT_CR:
1771
15.1k
    case BT_S:
1772
15.1k
      ptr += MINBPC(enc);
1773
15.1k
      break;
1774
16.8k
    default:
1775
16.8k
      return ptr;
1776
31.9k
    }
1777
31.9k
  }
1778
16.8k
}
xmltok.c:normal_skipS
Line
Count
Source
1766
6.89k
PREFIX(skipS)(const ENCODING *enc, const char *ptr) {
1767
11.0k
  for (;;) {
1768
11.0k
    switch (BYTE_TYPE(enc, ptr)) {
1769
897
    case BT_LF:
1770
1.95k
    case BT_CR:
1771
4.18k
    case BT_S:
1772
4.18k
      ptr += MINBPC(enc);
1773
4.18k
      break;
1774
6.89k
    default:
1775
6.89k
      return ptr;
1776
11.0k
    }
1777
11.0k
  }
1778
6.89k
}
xmltok.c:little2_skipS
Line
Count
Source
1766
3.32k
PREFIX(skipS)(const ENCODING *enc, const char *ptr) {
1767
6.73k
  for (;;) {
1768
6.73k
    switch (BYTE_TYPE(enc, ptr)) {
1769
201
    case BT_LF:
1770
2.41k
    case BT_CR:
1771
3.41k
    case BT_S:
1772
3.41k
      ptr += MINBPC(enc);
1773
3.41k
      break;
1774
3.32k
    default:
1775
3.32k
      return ptr;
1776
6.73k
    }
1777
6.73k
  }
1778
3.32k
}
xmltok.c:big2_skipS
Line
Count
Source
1766
6.58k
PREFIX(skipS)(const ENCODING *enc, const char *ptr) {
1767
14.1k
  for (;;) {
1768
14.1k
    switch (BYTE_TYPE(enc, ptr)) {
1769
646
    case BT_LF:
1770
2.18k
    case BT_CR:
1771
7.55k
    case BT_S:
1772
7.55k
      ptr += MINBPC(enc);
1773
7.55k
      break;
1774
6.58k
    default:
1775
6.58k
      return ptr;
1776
14.1k
    }
1777
14.1k
  }
1778
6.58k
}
1779
1780
static void PTRCALL
1781
PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end,
1782
1.50M
                       POSITION *pos) {
1783
4.71G
  while (HAS_CHAR(enc, ptr, end)) {
1784
4.71G
    switch (BYTE_TYPE(enc, ptr)) {
1785
0
#  define LEAD_CASE(n)                                                         \
1786
60.5M
  case BT_LEAD##n:                                                             \
1787
60.5M
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1788
60.5M
    pos->columnNumber++;                                                       \
1789
60.5M
    break;
1790
1.14M
      LEAD_CASE(2)
1791
504k
      LEAD_CASE(3)
1792
58.8M
      LEAD_CASE(4)
1793
0
#  undef LEAD_CASE
1794
15.0M
    case BT_LF:
1795
15.0M
      pos->columnNumber = 0;
1796
15.0M
      pos->lineNumber++;
1797
15.0M
      ptr += MINBPC(enc);
1798
15.0M
      break;
1799
82.4M
    case BT_CR:
1800
82.4M
      pos->lineNumber++;
1801
82.4M
      ptr += MINBPC(enc);
1802
82.4M
      if (HAS_CHAR(enc, ptr, end) && BYTE_TYPE(enc, ptr) == BT_LF)
1803
8.57M
        ptr += MINBPC(enc);
1804
82.4M
      pos->columnNumber = 0;
1805
82.4M
      break;
1806
4.56G
    default:
1807
4.56G
      ptr += MINBPC(enc);
1808
4.56G
      pos->columnNumber++;
1809
4.56G
      break;
1810
4.71G
    }
1811
4.71G
  }
1812
1.50M
}
xmltok.c:normal_updatePosition
Line
Count
Source
1782
584k
                       POSITION *pos) {
1783
1.22G
  while (HAS_CHAR(enc, ptr, end)) {
1784
1.22G
    switch (BYTE_TYPE(enc, ptr)) {
1785
0
#  define LEAD_CASE(n)                                                         \
1786
0
  case BT_LEAD##n:                                                             \
1787
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1788
0
    pos->columnNumber++;                                                       \
1789
0
    break;
1790
1.14M
      LEAD_CASE(2)
1791
504k
      LEAD_CASE(3)
1792
280k
      LEAD_CASE(4)
1793
0
#  undef LEAD_CASE
1794
4.73M
    case BT_LF:
1795
4.73M
      pos->columnNumber = 0;
1796
4.73M
      pos->lineNumber++;
1797
4.73M
      ptr += MINBPC(enc);
1798
4.73M
      break;
1799
52.6M
    case BT_CR:
1800
52.6M
      pos->lineNumber++;
1801
52.6M
      ptr += MINBPC(enc);
1802
52.6M
      if (HAS_CHAR(enc, ptr, end) && BYTE_TYPE(enc, ptr) == BT_LF)
1803
717k
        ptr += MINBPC(enc);
1804
52.6M
      pos->columnNumber = 0;
1805
52.6M
      break;
1806
1.16G
    default:
1807
1.16G
      ptr += MINBPC(enc);
1808
1.16G
      pos->columnNumber++;
1809
1.16G
      break;
1810
1.22G
    }
1811
1.22G
  }
1812
584k
}
xmltok.c:little2_updatePosition
Line
Count
Source
1782
440k
                       POSITION *pos) {
1783
1.62G
  while (HAS_CHAR(enc, ptr, end)) {
1784
1.62G
    switch (BYTE_TYPE(enc, ptr)) {
1785
0
#  define LEAD_CASE(n)                                                         \
1786
0
  case BT_LEAD##n:                                                             \
1787
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1788
0
    pos->columnNumber++;                                                       \
1789
0
    break;
1790
0
      LEAD_CASE(2)
1791
0
      LEAD_CASE(3)
1792
22.8M
      LEAD_CASE(4)
1793
0
#  undef LEAD_CASE
1794
3.45M
    case BT_LF:
1795
3.45M
      pos->columnNumber = 0;
1796
3.45M
      pos->lineNumber++;
1797
3.45M
      ptr += MINBPC(enc);
1798
3.45M
      break;
1799
11.6M
    case BT_CR:
1800
11.6M
      pos->lineNumber++;
1801
11.6M
      ptr += MINBPC(enc);
1802
11.6M
      if (HAS_CHAR(enc, ptr, end) && BYTE_TYPE(enc, ptr) == BT_LF)
1803
636k
        ptr += MINBPC(enc);
1804
11.6M
      pos->columnNumber = 0;
1805
11.6M
      break;
1806
1.59G
    default:
1807
1.59G
      ptr += MINBPC(enc);
1808
1.59G
      pos->columnNumber++;
1809
1.59G
      break;
1810
1.62G
    }
1811
1.62G
  }
1812
440k
}
xmltok.c:big2_updatePosition
Line
Count
Source
1782
483k
                       POSITION *pos) {
1783
1.86G
  while (HAS_CHAR(enc, ptr, end)) {
1784
1.86G
    switch (BYTE_TYPE(enc, ptr)) {
1785
0
#  define LEAD_CASE(n)                                                         \
1786
0
  case BT_LEAD##n:                                                             \
1787
0
    ptr += n; /* NOTE: The encoding has already been validated. */             \
1788
0
    pos->columnNumber++;                                                       \
1789
0
    break;
1790
0
      LEAD_CASE(2)
1791
0
      LEAD_CASE(3)
1792
35.7M
      LEAD_CASE(4)
1793
0
#  undef LEAD_CASE
1794
6.82M
    case BT_LF:
1795
6.82M
      pos->columnNumber = 0;
1796
6.82M
      pos->lineNumber++;
1797
6.82M
      ptr += MINBPC(enc);
1798
6.82M
      break;
1799
18.2M
    case BT_CR:
1800
18.2M
      pos->lineNumber++;
1801
18.2M
      ptr += MINBPC(enc);
1802
18.2M
      if (HAS_CHAR(enc, ptr, end) && BYTE_TYPE(enc, ptr) == BT_LF)
1803
7.22M
        ptr += MINBPC(enc);
1804
18.2M
      pos->columnNumber = 0;
1805
18.2M
      break;
1806
1.80G
    default:
1807
1.80G
      ptr += MINBPC(enc);
1808
1.80G
      pos->columnNumber++;
1809
1.80G
      break;
1810
1.86G
    }
1811
1.86G
  }
1812
483k
}
1813
1814
#  undef DO_LEAD_CASE
1815
#  undef MULTIBYTE_CASES
1816
#  undef INVALID_CASES
1817
#  undef CHECK_NAME_CASE
1818
#  undef CHECK_NAME_CASES
1819
#  undef CHECK_NMSTRT_CASE
1820
#  undef CHECK_NMSTRT_CASES
1821
1822
#endif /* XML_TOK_IMPL_C */