@@ -114,17 +114,15 @@ add_entity(const char *entity, const size_t elen, char *output) {
114
114
115
115
static size_t
116
116
process_entity (const char * input , size_t input_sz , char * output , size_t * output_pos ) {
117
- size_t input_pos = 0 ;
117
+ size_t input_pos = 1 ; // ignore leading &
118
118
while (input_pos < input_sz ) {
119
119
char ch = input [input_pos ++ ];
120
120
if (('a' <= ch && ch <= 'z' ) || ('A' <= ch && ch <= 'Z' ) || ('0' <= ch && ch <= '9' ) || (ch == '#' && input_pos == 1 ));
121
- else if (ch == ';' ) * output_pos += add_entity (input , input_pos - 1 , output + * output_pos );
122
- else {
123
- output [(* output_pos )++ ] = '&' ;
124
- memcpy (output + * output_pos , input , input_pos );
125
- * output_pos += input_pos ;
126
- }
121
+ else if (ch == ';' ) { * output_pos += add_entity (input , input_pos - 1 , output + * output_pos ); return input_pos ; }
122
+ else break ;
127
123
}
124
+ memcpy (output + * output_pos , input , input_pos );
125
+ * output_pos += input_pos ;
128
126
return input_pos ;
129
127
}
130
128
@@ -134,12 +132,6 @@ replace(const char *input, size_t input_sz, char *output, int keep_xml_entities)
134
132
while (input_pos < input_sz ) {
135
133
const char * p = (const char * )memchr (input + input_pos , '&' , input_sz - input_pos );
136
134
if (p ) {
137
- if (p > input + input_pos ) {
138
- size_t sz = p - (input + input_pos );
139
- memcpy (output + output_pos , input + input_pos , sz );
140
- output_pos += sz ;
141
- input_pos += sz ;
142
- }
143
135
input_pos += process_entity (p , input_sz - (p - input ), output , & output_pos );
144
136
} else {
145
137
memcpy (output + output_pos , input + input_pos , input_sz - input_pos );
0 commit comments