diff --git a/frontend/input.c b/frontend/input.c
index 8cead36..7ab9dc3 100644
--- a/frontend/input.c
+++ b/frontend/input.c
@@ -119,7 +119,9 @@ static void unsuperr(const char *name)
 
 static int seekchunk(FILE *f, riffsub_t *riffsub, char *name)
 {
- while (1)
+ int skipped;
+
+ for(skipped = 0; skipped < 10; skipped++)
  {
    if (fread(riffsub, 1, sizeof(*riffsub), f) != sizeof(*riffsub))
      return 0;
@@ -129,12 +131,12 @@ static int seekchunk(FILE *f, riffsub_t *riffsub, char *name)
      riffsub->len++;
 
    if (!memcmp(&(riffsub->label), name, 4))
-     break;
+     return 1;
 
    fseek(f, riffsub->len, SEEK_CUR);
  }
 
- return 1;
+ return 0;
 }
 
 pcmfile_t *wav_open_read(const char *name, int rawinput)
@@ -182,7 +184,11 @@ pcmfile_t *wav_open_read(const char *name, int rawinput)
     memset(&wave, 0, sizeof(wave));
 
     fmtsize = (riffsub.len < sizeof(wave)) ? riffsub.len : sizeof(wave);
-    if (fread(&wave, 1, fmtsize, wave_f) != fmtsize)
+    // check if format is at least 16 bytes long
+    if (fmtsize < 16)
+	return NULL;
+
+   if (fread(&wave, 1, fmtsize, wave_f) != fmtsize)
         return NULL;
 
     fseek(wave_f, riffsub.len - fmtsize, SEEK_CUR);
diff --git a/frontend/main.c b/frontend/main.c
index 60f687b..b4bde36 100644
--- a/frontend/main.c
+++ b/frontend/main.c
@@ -806,6 +806,13 @@ int main(int argc, char *argv[])
     hEncoder = faacEncOpen(infile->samplerate, infile->channels,
         &samplesInput, &maxBytesOutput);
 
+    if (hEncoder == NULL)
+    {
+        fprintf(stderr, "Couldn't open encoder instance for input file %s\n", audioFileName);
+        wav_close(infile);
+        return 1;
+    }
+
 #ifdef HAVE_LIBMP4V2
     if (container != MP4_CONTAINER && (ntracks || trackno || artist ||
                        title ||  album || year || art ||
diff --git a/libfaac/frame.c b/libfaac/frame.c
index 5c203b2..0a6ab56 100644
--- a/libfaac/frame.c
+++ b/libfaac/frame.c
@@ -288,7 +288,7 @@ int FAACAPI faacEncSetConfiguration(faacEncHandle hpEncoder,
 			hEncoder->srInfo->num_cb_short);
 	
 	/* load channel_map */
-	for( i = 0; i < 64; i++ )
+	for( i = 0; i < MAX_CHANNELS; i++ )
 		hEncoder->config.channel_map[i] = config->channel_map[i];
 
     /* OK */
@@ -303,6 +303,9 @@ faacEncHandle FAACAPI faacEncOpen(unsigned long sampleRate,
     unsigned int channel;
     faacEncStruct* hEncoder;
 
+    if (numChannels > MAX_CHANNELS)
+	return NULL;
+
     *inputSamples = FRAME_LEN*numChannels;
     *maxOutputBytes = (6144/8)*numChannels;
 
@@ -342,7 +345,7 @@ faacEncHandle FAACAPI faacEncOpen(unsigned long sampleRate,
     hEncoder->config.shortctl = SHORTCTL_NORMAL;
 
 	/* default channel map is straight-through */
-	for( channel = 0; channel < 64; channel++ )
+	for( channel = 0; channel < MAX_CHANNELS; channel++ )
 		hEncoder->config.channel_map[channel] = channel;
 	
     /*