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 parsingSource = false
|
||||||
private var endFeedFound = false
|
private var endFeedFound = false
|
||||||
|
|
||||||
|
private var depth = 0
|
||||||
|
private var entryDepth = -1
|
||||||
|
|
||||||
static func parsedFeed(urlString: String, data: Data) -> RSSFeed {
|
static func parsedFeed(urlString: String, data: Data) -> RSSFeed {
|
||||||
|
|
||||||
let parser = AtomParser(urlString: urlString, data: data)
|
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?>?) {
|
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 {
|
if endFeedFound {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -307,6 +312,7 @@ extension AtomParser: SAXParserDelegate {
|
|||||||
|
|
||||||
if SAXEqualTags(localName, XMLName.entry) {
|
if SAXEqualTags(localName, XMLName.entry) {
|
||||||
parsingArticle = true
|
parsingArticle = true
|
||||||
|
entryDepth = depth
|
||||||
addArticle()
|
addArticle()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -353,6 +359,10 @@ extension AtomParser: SAXParserDelegate {
|
|||||||
|
|
||||||
public func saxParser(_ saxParser: SAXParser, xmlEndElement localName: XMLPointer, prefix: XMLPointer?, uri: XMLPointer?) {
|
public func saxParser(_ saxParser: SAXParser, xmlEndElement localName: XMLPointer, prefix: XMLPointer?, uri: XMLPointer?) {
|
||||||
|
|
||||||
|
defer {
|
||||||
|
depth -= 1
|
||||||
|
}
|
||||||
|
|
||||||
if SAXEqualTags(localName, XMLName.feed) {
|
if SAXEqualTags(localName, XMLName.feed) {
|
||||||
endFeedFound = true
|
endFeedFound = true
|
||||||
return
|
return
|
||||||
@ -417,9 +427,10 @@ extension AtomParser: SAXParserDelegate {
|
|||||||
|
|
||||||
else if SAXEqualTags(localName, XMLName.entry) {
|
else if SAXEqualTags(localName, XMLName.entry) {
|
||||||
parsingArticle = false
|
parsingArticle = false
|
||||||
|
entryDepth = -1
|
||||||
}
|
}
|
||||||
|
|
||||||
else if parsingArticle && !parsingSource {
|
else if parsingArticle && !parsingSource && depth == entryDepth + 1 {
|
||||||
addArticleElement(saxParser, localName, prefix)
|
addArticleElement(saxParser, localName, prefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user