1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-06-30 01:55:30 +00:00

Test some more obscure proc. instructions and fix some assertion failures

This commit is contained in:
Jonas Fonseca 2005-12-29 21:52:27 +01:00 committed by Jonas Fonseca
parent 57168e1fbc
commit bd877570d2
2 changed files with 44 additions and 5 deletions

View File

@ -385,13 +385,23 @@ static inline void
scan_sgml_proc_inst_token(struct dom_scanner *scanner, struct dom_scanner_token *token) scan_sgml_proc_inst_token(struct dom_scanner *scanner, struct dom_scanner_token *token)
{ {
unsigned char *string = scanner->position; unsigned char *string = scanner->position;
size_t size;
token->string.string = string++; token->string.string = string;
/* Figure out where the processing instruction ends */ /* Figure out where the processing instruction ends. This doesn't use
while (skip_sgml(scanner, &string, '>', 0)) * skip_sgml() since we MUST ignore precedence here to allow '<' inside
if (string[-2] == '?') * the data part to be skipped correctly. */
for (size = scanner->end - string;
size > 0 && (string = memchr(string, '>', size));
string++) {
if (string[-1] == '?') {
string++;
break; break;
}
}
if (!string) string = scanner->end;
token->type = SGML_TOKEN_PROCESS_DATA; token->type = SGML_TOKEN_PROCESS_DATA;
token->string.length = string - token->string.string - 2; token->string.length = string - token->string.string - 2;
@ -417,7 +427,8 @@ scan_sgml_tokens(struct dom_scanner *scanner)
current < table_end && scanner->position < scanner->end; current < table_end && scanner->position < scanner->end;
current++) { current++) {
if (scanner->state == SGML_STATE_ELEMENT if (scanner->state == SGML_STATE_ELEMENT
|| *scanner->position == '<') { || (*scanner->position == '<'
&& scanner->state != SGML_STATE_PROC_INST)) {
scan_sgml(scanner, scanner->position, SGML_CHAR_WHITESPACE); scan_sgml(scanner, scanner->position, SGML_CHAR_WHITESPACE);
if (scanner->position >= scanner->end) break; if (scanner->position >= scanner->end) break;

View File

@ -135,6 +135,34 @@ proc-instruction: xml -> encoding="UTF8"
#text: \n...\n #text: \n...\n
proc-instruction: ecmascript -> var val=2;\n' proc-instruction: ecmascript -> var val=2;\n'
test_output_equals \
'Parse exotic processing instructions.' \
'<?xml ?+>+?>-?>-<?js?>-<??>-' \
'
proc-instruction: xml -> ?+>+
#text: -?>-
proc-instruction: js ->
#text: -
proc-instruction: ->
#text: -'
test_output_equals \
'Parse incorrect processing instructions.' \
'<?js<?>-<?<??>-<?xml <=";&?>-<?' \
'
proc-instruction: js -> <
#text: -
proc-instruction: -> <?
#text: -
proc-instruction: xml -> <=";&
#text: -'
test_output_equals \
'Parse incorrect processing instructions (II).' \
'<?><?' \
'
proc-instruction: -> ><?'
test_output_equals \ test_output_equals \
'Skip spaces not inside text.' \ 'Skip spaces not inside text.' \
'< '<