mirror of
https://github.com/rkd77/elinks.git
synced 2024-11-04 08:17:17 -05:00
Test some more obscure proc. instructions and fix some assertion failures
This commit is contained in:
parent
57168e1fbc
commit
bd877570d2
@ -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;
|
||||||
|
|
||||||
|
@ -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.' \
|
||||||
'<
|
'<
|
||||||
|
Loading…
Reference in New Issue
Block a user