While receiving a meeting request from Novell Groupwise (PRODID:-//Novell Inc//Groupwise 7.0.3 ), the timezone definition looked like this:
TZID:(GMT+0100) West-Europa (standaardtijd)
Please note the BYDAY=255SU. Obviously being processed as unsigned, the -1 turned into 255. This causes an endless loop in ical, which I fixed by limiting the value that can be set in BYDAY to a char instead of an int.
I also wanted to add some other sanity checks on the value, but wasn't really sure if anything other than -1, 1-5 would be possible. maybe you can even have -5 through -1 too?