This commit is contained in:
Araq 2019-09-04 11:20:30 +02:00
commit fa5707e7e2
2 changed files with 26 additions and 3 deletions

View file

@ -472,16 +472,19 @@ proc parseEntity(my: var XmlParser, dest: var string) =
inc(pos, 4) inc(pos, 4)
else: else:
my.bufpos = pos my.bufpos = pos
parseName(my, dest) var name = ""
parseName(my, name)
pos = my.bufpos pos = my.bufpos
if my.err != errNameExpected: if my.err != errNameExpected and my.buf[pos] == ';':
my.kind = xmlEntity my.kind = xmlEntity
else: else:
add(dest, '&') add(dest, '&')
add(dest, name)
if my.buf[pos] == ';': if my.buf[pos] == ';':
inc(pos) inc(pos)
else: else:
markError(my, errSemicolonExpected) my.err = errSemicolonExpected
# do not overwrite 'my.state' here, it's a benign error
my.bufpos = pos my.bufpos = pos
proc parsePI(my: var XmlParser) = proc parsePI(my: var XmlParser) =

View file

@ -2,6 +2,9 @@ discard """
output: ''' output: '''
@[] @[]
true true
https://example.com/test?format=jpg&name=orig##
https://example.com/test?format=jpg&name=orig##text
https://example.com/test?format=jpg##text
''' '''
""" """
import htmlparser import htmlparser
@ -136,3 +139,20 @@ block t6154:
doAssert ps[6].attr("quux") == "" doAssert ps[6].attr("quux") == ""
doAssert ps[6].attr("whatever") == "" doAssert ps[6].attr("whatever") == ""
doassert ps[6].len == 0 doassert ps[6].len == 0
# bug #11713, #1034
var content = """
# with &
<img src="https://example.com/test?format=jpg&name=orig" alt="">
<img src="https://example.com/test?format=jpg&name=orig" alt="text">
# without &
<img src="https://example.com/test?format=jpg" alt="text">
"""
var
stream = newStringStream(content)
body = parseHtml(stream)
for y in body.findAll("img"):
echo y.attr("src"), "##", y.attr("alt")