From 0b30ec6256b921f6861d7a9e3b592e646ed8427d Mon Sep 17 00:00:00 2001 From: Chris Kelly Date: Mon, 15 Oct 2012 19:14:36 -0400 Subject: [PATCH] Adds basic exception handling for some invalid data --- lib/lastfm/response.rb | 2 ++ .../user_get_recent_tracks_malformed.xml | 18 ++++++++++++++++++ spec/method_specs/user_spec.rb | 11 +++++++++++ 3 files changed, 31 insertions(+) create mode 100644 spec/fixtures/user_get_recent_tracks_malformed.xml diff --git a/lib/lastfm/response.rb b/lib/lastfm/response.rb index 8e38aac..c6f1432 100644 --- a/lib/lastfm/response.rb +++ b/lib/lastfm/response.rb @@ -7,6 +7,8 @@ class Response def initialize(body) @xml = XmlSimple.xml_in(body, 'ForceArray' => ['image', 'tag', 'user', 'event', 'correction']) + rescue REXML::ParseException + @xml = XmlSimple.xml_in(body.encode(Encoding.find("ISO-8859-1"), :undef => :replace), 'ForceArray' => ['image', 'tag', 'user', 'event', 'correction']) end def success? diff --git a/spec/fixtures/user_get_recent_tracks_malformed.xml b/spec/fixtures/user_get_recent_tracks_malformed.xml new file mode 100644 index 0000000..53c6c90 --- /dev/null +++ b/spec/fixtures/user_get_recent_tracks_malformed.xml @@ -0,0 +1,18 @@ + + + + + ￾䬀愀瀀 匀氀愀瀀 + ￾匀琀爀漀戀攀 䰀椀最栀琀猀 ㈀ 䤀戀椀稀愀 ⠀䐀攀愀搀洀愀甀㔀 瘀猀 䔀氀氀椀攀 䜀漀甀氀搀椀渀最 瘀猀 匀眀攀搀椀猀栀 䠀漀甀猀攀 䴀愀昀椀愀 瘀猀 䘀攀爀最椀攀 瘀猀 䰀椀氀 䨀漀渀⤀ + 0 + + ￾䔀愀爀洀椀氀欀⸀挀漀洀 ⴀ ⌀䴀愀猀栀甀瀀䴀漀渀搀愀礀 + http://www.last.fm/music/%EF%BF%BE%E4%AC%80%E6%84%80%E7%80%80%E2%80%80%E5%8C%80%E6%B0%80%E6%84%80%E7%80%80/_/%EF%BF%BE%E5%8C%80%E7%90%80%E7%88%80%E6%BC%80%E6%88%80%E6%94%80%E2%80%80%E4%B0%80%E6%A4%80%E6%9C%80%E6%A0%80%E7%90%80%E7%8C%80%E2%80%80%E3%88%80%E2%80%80%E4%A4%80%E6%88%80%E6%A4%80%E7%A8%80%E6%84%80%E2%80%80%E2%A0%80%E4%90%80%E6%94%80%E6%84%80%E6%90%80%E6%B4%80%E6%84%80%E7%94%80%E3%94%80%E2%80%80%E7%98%80%E7%8C%80%E2%80%80%E4%94%80%E6%B0%80%E6%B0%80%E6%A4%80%E6%94%80%E2%80%80%E4%9C%80%E6%BC%80%E7%94%80%E6%B0%80%E6%90%80%E6%A4%80%E6%B8%80%E6%9C%80%E2%80%80%E7%98%80%E7%8C%80%E2%80%80%E5%8C%80%E7%9C%80%E6%94%80%E6%90%80%E6%A4%80%E7%8C%80%E6%A0%80%E2%80%80%E4%A0%80%E6%BC%80%E7%94%80%E7%8C%80%E6%94%80%E2%80%80%E4%B4%80%E6%84%80%E6%98%80%E6%A4%80%E6%84%80%E2%80%80%E7%98%80%E7%8C%80%E2%80%80%E4%98%80%E6%94%80%E7%88%80%E6%9C%80%E6%A4%80%E6%94%80%E2%80%80%E7%98%80%E7%8C%80%E2%80%80%E4%B0%80%E6%A4%80%E6%B0%80%E2%80%80%E4%A8%80%E6%BC%80%E6%B8%80%E2%A4%80 + + + + + 2 Jun 2012, 19:18 + + + diff --git a/spec/method_specs/user_spec.rb b/spec/method_specs/user_spec.rb index da8ab5b..a535b85 100644 --- a/spec/method_specs/user_spec.rb +++ b/spec/method_specs/user_spec.rb @@ -210,6 +210,17 @@ tracks[1]['artist']['content'].should == 'Kylie Minogue' tracks.size.should == 2 end + + it 'should not error when a user\'s recent tracks includes malformed data' do + @lastfm.should_receive(:request).with('user.getRecentTracks', { + :user => 'test', + :page => nil, + :limit => nil, + :to => nil, + :from => nil + }).and_return(make_response('user_get_recent_tracks_malformed')) + tracks = @lastfm.user.get_recent_tracks(:user => 'test') + end end describe '#get_top_tags' do