diff --git a/bob/io/image/cpp/netpbm.cpp b/bob/io/image/cpp/netpbm.cpp
index d74c400393b82d4af7a96a450e5dad2b041c16ca..abf510f7428bbb2727a392497beed8b3fa83684f 100644
--- a/bob/io/image/cpp/netpbm.cpp
+++ b/bob/io/image/cpp/netpbm.cpp
@@ -117,16 +117,8 @@ pm_openw(const char * const name) {
 
 void
 pm_close(FILE * const f) {
-  // fprintf(stderr, "I am closing a file\n");
-  fflush( f );
-  // if ( ferror( f ) )
-    // boost::format m("a file read or write error occurred at some point");
-    // throw std::runtime_error(m.str());
-  if ( f != stdin )
-    fclose( f );
-  //   if ( fclose( f ) != 0 )
-      // boost::format m("cannot close file.");
-      // throw std::runtime_error(m.str());
+  fflush(f);
+  if (f != stdin) fclose( f );
 }
 
 static boost::shared_ptr<std::FILE> make_cfile(const char *filename, const char *flags)
@@ -168,12 +160,12 @@ static void pnm_readpaminit(FILE *file, struct pam * const pamP, const int size)
     if (img_colors >> 8 == 0)       pamP->bytes_per_sample = 1;
     else if (img_colors >> 16 == 0) pamP->bytes_per_sample = 2;
   } else {
-    boost::format m("Unknown PNM/PFM image format.");
+    boost::format m("pnm_readpaminit(): Unknown PNM/PFM image format.");
     throw std::runtime_error(m.str());
   }
 
   if (read_err != 0) {
-    boost::format m("Something went wrong when reading the image file.");
+    boost::format m("pnm_readpaminit(): Something went wrong when reading the image file.");
     throw std::runtime_error(m.str());
   }
 
@@ -214,7 +206,7 @@ static void pnm_readpam(struct pam * const pamP, int *img_data) {
   }
 
   if (read_err != 0) {
-    boost::format m("Something went wrong when reading the image file.");
+    boost::format m("pnm_readpam(): Something went wrong when reading the image file.");
     throw std::runtime_error(m.str());
   }
 }
@@ -240,7 +232,7 @@ static void pnm_writepam(struct pam * const pamP, int *img_data) {
   }
 
   if (write_err != 0) {
-    boost::format m("Something went wrong when writing the image file.");
+    boost::format m("pnm_writepam(): Something went wrong when writing the image file.");
     throw std::runtime_error(m.str());
   }
 }
diff --git a/bob/io/image/cpp/pnmio.cpp b/bob/io/image/cpp/pnmio.cpp
index b8555cba342b556d572d80ff2971beed893ef5df..0b43defdd23b626c11ecc9dbc18b3669939976ec 100644
--- a/bob/io/image/cpp/pnmio.cpp
+++ b/bob/io/image/cpp/pnmio.cpp
@@ -309,13 +309,13 @@ int read_pbm_data(FILE *f, int *img_in, int img_size, int is_ascii, int img_widt
     if (is_ascii == 1) {
       read_count = fscanf(f, "%d", &lum_val);
       if (read_count < 1) return -1;
-      if (i >= img_size) return -1;
+      if (i >= img_size) break;
       img_in[i++] = lum_val;
     } else {
       lum_val = fgetc(f);
       /* Decode the image contents byte-by-byte. */
       for (k = 0; k < 8; k++) {
-        if (i >= img_size) return -1;
+        if (i >= img_size) break;
         img_in[i++] = (lum_val >> (7-k)) & 0x1;
         // fprintf(stderr, "i: %d, %d\n", i, img_in[i]);
         row_position++;
@@ -355,7 +355,7 @@ int read_pgm_data(FILE *f, int *img_in, int img_size, int is_ascii,
         lum_val |= fgetc(f);
       }
     }
-    if (i >= img_size) return -1;
+    if (i >= img_size) break;
     img_in[i++] = lum_val;
   }
   // fclose(f);
@@ -397,7 +397,7 @@ int read_ppm_data(FILE *f, int *img_in, int img_size, int is_ascii,
         b_val |= fgetc(f);
       }
     }
-    if (i >= img_size) return -1;
+    if (i >= img_size) break;
     img_in[i++] = r_val;
     img_in[i++] = g_val;
     img_in[i++] = b_val;
diff --git a/bob/io/image/data/test_corrupted.pbm b/bob/io/image/data/test_corrupted.pbm
new file mode 100644
index 0000000000000000000000000000000000000000..5d28f04a058d99b95b7d813898dafdef75e9c2fa
--- /dev/null
+++ b/bob/io/image/data/test_corrupted.pbm
@@ -0,0 +1,3 @@
+P4
+4 6
+�@  @a
diff --git a/bob/io/image/data/test_corrupted.pgm b/bob/io/image/data/test_corrupted.pgm
new file mode 100644
index 0000000000000000000000000000000000000000..8f34579e2f6c6710677b5689d15099638912a948
Binary files /dev/null and b/bob/io/image/data/test_corrupted.pgm differ
diff --git a/bob/io/image/data/test_corrupted.ppm b/bob/io/image/data/test_corrupted.ppm
new file mode 100644
index 0000000000000000000000000000000000000000..fa528857de00ad3392bee8a35be1e94e06ffa500
Binary files /dev/null and b/bob/io/image/data/test_corrupted.ppm differ
diff --git a/bob/io/image/test.py b/bob/io/image/test.py
index d6f4db232896f2d4eed5e920b0392b372bf350d5..7e21f38bf2c5d09f90fb3fe3f89810814a00d463 100644
--- a/bob/io/image/test.py
+++ b/bob/io/image/test.py
@@ -107,7 +107,7 @@ def test_netpbm():
 
 def test_image_load():
   # test that the generic bob.io.image.load function works as expected
-  for filename in ('test.jpg', 'cmyk.jpg', 'test.pbm', 'test.pgm', 'test.ppm', 'img_rgba_color.png'):
+  for filename in ('test.jpg', 'cmyk.jpg', 'test.pbm', 'test_corrupted.pbm', 'test.pgm', 'test_corrupted.pgm', 'test.ppm', 'test_corrupted.ppm', 'img_rgba_color.png'):
     full_file = test_utils.datafile(filename, __name__)
     # load with just image name
     i1 = bob.io.image.load(full_file)