diff --git a/browser/components/feeds/src/nsFeedSniffer.cpp b/browser/components/feeds/src/nsFeedSniffer.cpp index a7cbf4cdf7be..3f742291b6c0 100644 --- a/browser/components/feeds/src/nsFeedSniffer.cpp +++ b/browser/components/feeds/src/nsFeedSniffer.cpp @@ -163,6 +163,92 @@ HasAttachmentDisposition(nsIHttpChannel* httpChannel) return PR_FALSE; } +/** + * + * Determine if a substring is the "documentElement" in the document. + * + * All of our sniffed substrings: ' (We do this because we don't want + // to sniff indicator substrings that are embedded within other nodes, e.g. + // comments: + if (!FindCharInReadable('>', start, end)) + return PR_FALSE; + + // Reset end again + dataString.EndReading(end); + } + return PR_TRUE; +} + +/** + * Determines whether or not a string exists as the root element in an XML data + * string buffer. + * @param dataString + * The data being sniffed + * @param substring + * The substring being tested for existence and root-ness. + * @returns PR_TRUE if the substring exists and is the documentElement, PR_FALSE + * otherwise. + */ +static PRBool +ContainsTopLevelSubstring(nsACString& dataString, const nsACString& substring) +{ + nsACString::const_iterator start, end; + + dataString.BeginReading(start); + dataString.EndReading(end); + + PRBool isFeed = FindInReadable(substring, start, end); + + // Only do the validation when we find the substring. + return isFeed ? IsDocumentElement(dataString, substring, end) : isFeed; +} + NS_IMETHODIMP nsFeedSniffer::GetMIMETypeFromContent(nsIRequest* request, const PRUint8* data, @@ -244,23 +330,15 @@ nsFeedSniffer::GetMIMETypeFromContent(nsIRequest* request, PRBool isFeed = PR_FALSE; // RSS 0.91/0.92/2.0 - dataString.BeginReading(start_iter); - dataString.EndReading(end_iter); - - isFeed = FindInReadable(NS_LITERAL_CSTRING("