diff -ruNbBd Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/include/ape.h Audio-Scan-0.960.0/work/Audio-Scan-0.96/include/ape.h
--- Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/include/ape.h	2017-01-04 21:05:03.029108445 +0000
+++ Audio-Scan-0.960.0/work/Audio-Scan-0.96/include/ape.h	2016-11-22 02:13:18.000000000 +0000
@@ -29,12 +29,12 @@
 #ifndef _APETAG_H_
 #define _APETAG_H_
 
-#define APE_CHECKED_APE        1 << 0
-#define APE_CHECKED_OFFSET     1 << 1
-#define APE_CHECKED_FIELDS     1 << 2
-#define APE_HAS_APE            1 << 3
-#define APE_HAS_ID3            1 << 4
-#define APE_NO_ID3             1 << 5
+#define APE_CHECKED_APE        (1 << 0)
+#define APE_CHECKED_OFFSET     (1 << 1)
+#define APE_CHECKED_FIELDS     (1 << 2)
+#define APE_HAS_APE            (1 << 3)
+#define APE_HAS_ID3            (1 << 4)
+#define APE_NO_ID3             (1 << 5)
 
 /* Artificial limits -- recommended but can be increased */
 #define APE_MAXIMUM_TAG_SIZE   100 * 1024 // recommended limit is 8KB but have seen files that are larger (Bug 15324)
diff -ruNbBd Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/include/id3.h Audio-Scan-0.960.0/work/Audio-Scan-0.96/include/id3.h
--- Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/include/id3.h	2017-01-04 21:05:03.029108445 +0000
+++ Audio-Scan-0.960.0/work/Audio-Scan-0.96/include/id3.h	2016-11-22 01:56:18.000000000 +0000
@@ -135,5 +135,5 @@
 void _id3_skip(id3info *id3, uint32_t size);
 char const * _id3_genre_index(unsigned int index);
 char const * _id3_genre_name(char const *string);
-id3_compat const * _id3_compat_lookup(register char const *, register unsigned int);
-id3_frametype const * _id3_frametype_lookup(register char const *, register unsigned int);
+static id3_compat const * _id3_compat_lookup(register char const *, register unsigned int);
+static id3_frametype const * _id3_frametype_lookup(register char const *, register unsigned int);
diff -ruNbBd Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/asf.c Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/asf.c
--- Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/asf.c	2017-01-04 21:05:03.032441662 +0000
+++ Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/asf.c	2016-11-22 02:00:44.000000000 +0000
@@ -1500,7 +1500,7 @@
 {
   int frame_offset = -1;
   uint32_t song_length_ms;
-  uint32_t offset_index = 0;
+  int32_t offset_index = 0;
   uint32_t min_packet_size, max_packet_size;
   uint8_t found = 0;
   
diff -ruNbBd Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/id3.c Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/id3.c
--- Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/id3.c	2017-01-04 21:05:03.032441662 +0000
+++ Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/id3.c	2016-11-22 01:57:52.000000000 +0000
@@ -1017,7 +1017,7 @@
     if (encoding >= 0)
       i = 1;
     
-    for (i; i < frametype->nfields; i++) {
+    for (; i < frametype->nfields; i++) {
       SV *value = NULL;
       
       switch ( frametype->fields[i] ) {
diff -ruNbBd Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/mac.c Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/mac.c
--- Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/mac.c	2017-01-04 21:05:03.032441662 +0000
+++ Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/mac.c	2016-11-22 02:02:01.000000000 +0000
@@ -6,7 +6,7 @@
   Buffer header;
   char *bptr;
   int32_t ret = 0;
-  uint32_t header_end;
+  int32_t header_end;
 
   mac_streaminfo *si;
   Newz(0, si, sizeof(mac_streaminfo), mac_streaminfo);
diff -ruNbBd Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/mpc.c Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/mpc.c
--- Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/mpc.c	2017-01-04 21:05:03.032441662 +0000
+++ Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/mpc.c	2016-11-22 02:06:09.000000000 +0000
@@ -342,8 +342,6 @@
     my_hv_store(info, "audio_offset", newSVuv(si->tag_offset));
     my_hv_store(info, "audio_size", newSVuv(si->total_file_length - si->tag_offset));
     my_hv_store(info, "file_size", newSVuv(si->total_file_length));
-    
-    if (si->encoder)
       my_hv_store(info, "encoder", newSVpv(si->encoder, 0));
     
     if (si->profile_name)
diff -ruNbBd Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/ogg.c Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/ogg.c
--- Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/ogg.c	2017-01-04 21:05:03.032441662 +0000
+++ Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/ogg.c	2016-11-22 01:33:05.000000000 +0000
@@ -160,9 +160,11 @@
         break;
       }
       
+      // Parse comments, but only if we have any extra data in the buffer
+      if ( buffer_len(&vorbis_buf) > 0 ) {
       _parse_vorbis_comments(infile, &vorbis_buf, tags, 1);
-
       DEBUG_TRACE("  parsed vorbis comments\n");
+      }
 
       buffer_clear(&vorbis_buf);
       
diff -ruNbBd Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/wavpack.c Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/wavpack.c
--- Audio-Scan-0.950.2/work/Audio-Scan-0.950.2/src/wavpack.c	2017-01-04 21:05:03.035774878 +0000
+++ Audio-Scan-0.960.0/work/Audio-Scan-0.96/src/wavpack.c	2016-11-22 02:09:06.000000000 +0000
@@ -158,7 +158,7 @@
   {
     // samplerate, may be overridden by a later ID_SAMPLE_RATE metadata block
     uint32_t samplerate_index = (wvp->header->flags & 0x7800000) >> 23;
-    if ( samplerate_index >= 0 && samplerate_index < 0xF ) {
+    if ( samplerate_index < 0xF ) {
       my_hv_store( wvp->info, "samplerate", newSVuv( wavpack_sample_rates[samplerate_index] ) );
     }
     else {
