--- Formats.pm.orig 2010-04-15 10:28:10.000000000 +0200 +++ Formats.pm 2010-04-15 23:13:47.000000000 +0200 @@ -159,8 +159,9 @@ } # Extract tag and audio info per format + my $tagReaderClass; eval { - if (my $tagReaderClass = $class->classForFormat($type)) { + if ($tagReaderClass = $class->classForFormat($type)) { if ( !$loadedTagClasses{$type} ) { eval "use $tagReaderClass"; if ( $@ ) { @@ -168,16 +169,16 @@ return {}; } } - - $tags = $tagReaderClass->getTag($filepath, $anchor); - - $loadedTagClasses{$type} = 1; } }; if ($@) { logBacktrace("While trying to ->getTag($filepath) : $@"); } + else { + $tags = $tagReaderClass->getTag($filepath, $anchor); + $loadedTagClasses{$type} = 1; + } if (!defined $tags) { main::INFOLOG && $log->is_info && $log->info("No tags found for $filepath"); @@ -249,32 +250,25 @@ # Bug: 3998 - Strip UTF-16 BOMs from multiple genres (or other values). while (my ($tag, $value) = each %{$tags}) { - if (defined $tags->{$tag}) { + if (defined $value) { use bytes; - if (ref($tags->{$tag}) eq 'ARRAY') { - - for (my $i = 0; $i < scalar @{$tags->{$tag}}; $i++) { - - $tags->{$tag}->[$i] =~ s/$Slim::Utils::Unicode::bomRE//; - $tags->{$tag}->[$i] =~ s/\000$//; - } - - } else { - - $tags->{$tag} =~ s/$Slim::Utils::Unicode::bomRE//; - $tags->{$tag} =~ s/\000$//; + for ( ref $value eq 'ARRAY' ? @{$value} : $value ) { + next unless defined; + s{$Slim::Utils::Unicode::bomRE}{}; + s{\000$}{}; } - + $tags->{$tag} = $value; + # Bug 14587, sanity check all MusicBrainz ID tags to ensure it is a UUID and nothing more if ( $tag =~ /^MUSICBRAINZ.*ID$/ ) { # DiscID has a different format: # http://wiki.musicbrainz.org/Disc_ID_Calculation - if ( $tag eq 'MUSICBRAINZ_DISCID' && $tags->{$tag} =~ /^[0-9a-z_\.-]{28}$/i ) { + if ( $tag eq 'MUSICBRAINZ_DISCID' && $value =~ /^[0-9a-z_\.-]{28}$/i ) { $tags->{$tag} = lc($1); - } elsif ( $tags->{$tag} =~ /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i ) { + } elsif ( $value =~ /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i ) { $tags->{$tag} = lc($1); } else {