Fix bad titles in an Atom feed. Fix #4422.
This commit is contained in:
parent
2956ae6f2a
commit
fb7caeb5ad
@ -35,6 +35,9 @@ final class AtomParser {
|
||||
private var parsingSource = false
|
||||
private var endFeedFound = false
|
||||
|
||||
private var depth = 0
|
||||
private var entryDepth = -1
|
||||
|
||||
static func parsedFeed(urlString: String, data: Data) -> RSSFeed {
|
||||
|
||||
let parser = AtomParser(urlString: urlString, data: data)
|
||||
@ -293,6 +296,8 @@ extension AtomParser: SAXParserDelegate {
|
||||
|
||||
public func saxParser(_ saxParser: SAXParser, xmlStartElement localName: XMLPointer, prefix: XMLPointer?, uri: XMLPointer?, namespaceCount: Int, namespaces: UnsafePointer<XMLPointer?>?, attributeCount: Int, attributesDefaultedCount: Int, attributes: UnsafePointer<XMLPointer?>?) {
|
||||
|
||||
depth += 1
|
||||
|
||||
if endFeedFound {
|
||||
return
|
||||
}
|
||||
@ -307,6 +312,7 @@ extension AtomParser: SAXParserDelegate {
|
||||
|
||||
if SAXEqualTags(localName, XMLName.entry) {
|
||||
parsingArticle = true
|
||||
entryDepth = depth
|
||||
addArticle()
|
||||
return
|
||||
}
|
||||
@ -353,6 +359,10 @@ extension AtomParser: SAXParserDelegate {
|
||||
|
||||
public func saxParser(_ saxParser: SAXParser, xmlEndElement localName: XMLPointer, prefix: XMLPointer?, uri: XMLPointer?) {
|
||||
|
||||
defer {
|
||||
depth -= 1
|
||||
}
|
||||
|
||||
if SAXEqualTags(localName, XMLName.feed) {
|
||||
endFeedFound = true
|
||||
return
|
||||
@ -417,9 +427,10 @@ extension AtomParser: SAXParserDelegate {
|
||||
|
||||
else if SAXEqualTags(localName, XMLName.entry) {
|
||||
parsingArticle = false
|
||||
entryDepth = -1
|
||||
}
|
||||
|
||||
else if parsingArticle && !parsingSource {
|
||||
else if parsingArticle && !parsingSource && depth == entryDepth + 1 {
|
||||
addArticleElement(saxParser, localName, prefix)
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user