After I recently upgraded my local copy of XML::RSS, I discovered that my aggregated feed that is generated using XML::Feed from the feeds of all my blogs can no longer be proccessed correctly by Akregator. And when trying to validate it, I encountered some problems. This meant that we introduced some regressions into XML::RSS that had to be fixed.
The first problem I encountered was that I got empty <pubDate></pubDate> code. Looking at the XML::RSS code, I saw that the appropriate fields were still initialised to an empty string instead of undef, which caused them to be outputted. And the code in general was in an intermediate state than my changes. After merging my "datetime" local branch, I also had to fix some markup injection attacks that I found, since I didn't escape some of the tags' contents. Here's the issue with my patch for the whole enchilada.
The next errors had to do with "guid". In XML::RSS "permaLink" holds the guid URL if isPermaLink is true, and "guid" holds it if it is false. However, permaLink was equal to 1. As it turned out the parsing logic was out-dated, and had to be fixed. The fix along with testcases is in my local repository.
Next I found out that some of the items were missing the date time stamp. I noticed that it happened with an RSS 1.0 feed, and as it turned out the <dc:date> items were not handled correctly. A close inspection revelead that XML::Feed initialised XML::RSS with version => "2.0" and so the modules as a result were not defined during the parsing, due to changes in the modules initialisation for XML::RSS. So I added a workaround that when parsing the extra modules will again be defined (with a test). I can't see why version would be useful for anything except output.
And afterwards, the feed validated, and Akregator could read it. I had a lot of other plans for today, which had to be delays because of this work on XML::RSS. But a hacker got to do, what a hacker got to do.