Skip to content

Commit

Permalink
ignore byte order marks
Browse files Browse the repository at this point in the history
  • Loading branch information
nkanaev committed Oct 1, 2020
1 parent d1e28ea commit 8d24d3a
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 1 deletion.
3 changes: 2 additions & 1 deletion detector.go
Expand Up @@ -33,15 +33,16 @@ func DetectFeedType(feed io.Reader) FeedType {
buffer := new(bytes.Buffer)
buffer.ReadFrom(feed)

// remove leading whitespace (if exists)
var firstChar byte
loop: for {
ch, err := buffer.ReadByte()
if err != nil {
return FeedTypeUnknown
}
// ignore leading whitespace & byte order marks
switch ch {
case ' ', '\r', '\n', '\t':
case 0xFE, 0xFF, 0x00, 0xEF, 0xBB, 0xBF: // utf 8-16-32 bom
default:
firstChar = ch
buffer.UnreadByte()
Expand Down
1 change: 1 addition & 0 deletions detector_test.go
Expand Up @@ -19,6 +19,7 @@ func TestDetectFeedType(t *testing.T) {
{"atom03_feed.xml", gofeed.FeedTypeAtom},
{"atom10_feed.xml", gofeed.FeedTypeAtom},
{"rss_feed.xml", gofeed.FeedTypeRSS},
{"rss_feed_bom.xml", gofeed.FeedTypeRSS},
{"rss_feed_leading_spaces.xml", gofeed.FeedTypeRSS},
{"rdf_feed.xml", gofeed.FeedTypeRSS},
{"unknown_feed.xml", gofeed.FeedTypeUnknown},
Expand Down
3 changes: 3 additions & 0 deletions parser_test.go
Expand Up @@ -27,6 +27,7 @@ func TestParser_Parse(t *testing.T) {
{"atom03_feed.xml", "atom", "Feed Title", false},
{"atom10_feed.xml", "atom", "Feed Title", false},
{"rss_feed.xml", "rss", "Feed Title", false},
{"rss_feed_bom.xml", "rss", "Feed Title", false},
{"rss_feed_leading_spaces.xml", "rss", "Feed Title", false},
{"rdf_feed.xml", "rss", "Feed Title", false},
{"sample.json", "json", "title", false},
Expand Down Expand Up @@ -68,6 +69,7 @@ func TestParser_ParseString(t *testing.T) {
{"atom03_feed.xml", "atom", "Feed Title", false},
{"atom10_feed.xml", "atom", "Feed Title", false},
{"rss_feed.xml", "rss", "Feed Title", false},
{"rss_feed_bom.xml", "rss", "Feed Title", false},
{"rss_feed_leading_spaces.xml", "rss", "Feed Title", false},
{"rdf_feed.xml", "rss", "Feed Title", false},
{"sample.json", "json", "title", false},
Expand Down Expand Up @@ -109,6 +111,7 @@ func TestParser_ParseURL_Success(t *testing.T) {
{"atom03_feed.xml", "atom", "Feed Title", false},
{"atom10_feed.xml", "atom", "Feed Title", false},
{"rss_feed.xml", "rss", "Feed Title", false},
{"rss_feed_bom.xml", "rss", "Feed Title", false},
{"rss_feed_leading_spaces.xml", "rss", "Feed Title", false},
{"rdf_feed.xml", "rss", "Feed Title", false},
{"sample.json", "json", "title", false},
Expand Down
8 changes: 8 additions & 0 deletions testdata/parser/universal/rss_feed_bom.xml
@@ -0,0 +1,8 @@
<!--
Description: rss feed with byte order mark
-->
<rss version="2.0">
<channel>
<title>Feed Title</title>
</channel>
</rss>

0 comments on commit 8d24d3a

Please sign in to comment.