mochiweb_html tags must start with a letter (#171) Project: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/commit/dd26e09c Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/tree/dd26e09c Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/diff/dd26e09c
Branch: refs/heads/master Commit: dd26e09c9e30f1fa9f0bc6e7a78d552a6d404675 Parents: a1ed381 Author: vvoznesensky <vvoznesen...@gmail.com> Authored: Tue Apr 12 06:09:07 2016 +0400 Committer: Bob Ippolito <b...@redivi.com> Committed: Mon Apr 11 19:09:07 2016 -0700 ---------------------------------------------------------------------- src/mochiweb_html.erl | 4 +++- test/mochiweb_html_tests.erl | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/dd26e09c/src/mochiweb_html.erl ---------------------------------------------------------------------- diff --git a/src/mochiweb_html.erl b/src/mochiweb_html.erl index 70723af..418f24c 100644 --- a/src/mochiweb_html.erl +++ b/src/mochiweb_html.erl @@ -54,6 +54,8 @@ -define(IS_WHITESPACE(C), (C =:= $\s orelse C =:= $\t orelse C =:= $\r orelse C =:= $\n)). +-define(IS_LETTER(C), + ((C >= $A andalso C =< $Z) orelse (C >= $a andalso C =< $z))). -define(IS_LITERAL_SAFE(C), ((C >= $A andalso C =< $Z) orelse (C >= $a andalso C =< $z) orelse (C >= $0 andalso C =< $9))). @@ -349,7 +351,7 @@ tokenize(B, S=#decoder{offset=O}) -> {S2, _} = find_gt(B, S1), {{end_tag, Tag}, S2}; <<_:O/binary, "<", C, _/binary>> - when ?IS_WHITESPACE(C); not ?IS_LITERAL_SAFE(C) -> + when ?IS_WHITESPACE(C); not ?IS_LETTER(C) -> %% This isn't really strict HTML {{data, Data, _Whitespace}, S1} = tokenize_data(B, ?INC_COL(S)), {{data, <<$<, Data/binary>>, false}, S1}; http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/dd26e09c/test/mochiweb_html_tests.erl ---------------------------------------------------------------------- diff --git a/test/mochiweb_html_tests.erl b/test/mochiweb_html_tests.erl index 0310b28..03bab5b 100644 --- a/test/mochiweb_html_tests.erl +++ b/test/mochiweb_html_tests.erl @@ -601,3 +601,10 @@ implicit_html_test() -> [{<<"head">>, [], []}, {<<"body">>, [], []}]}, mochiweb_html:parse("<!doctype html><head></head><body></body>")). + +no_letter_no_tag_test() -> + ?assertEqual( + {<<"html">>,[], + [{<<"body">>,[],[<<"<3><!><*><<>>">>,{<<"body">>,[],[]}]}]}, + mochiweb_html:parse(<<"<html><body><3><!><*><<>><body></html>">>) + ).