diff --git a/MagickCore/threshold.c b/MagickCore/threshold.c
index edf289f..79389ce 100644
--- a/MagickCore/threshold.c
+++ b/MagickCore/threshold.c
@@ -1226,7 +1226,7 @@
   MagickStatusType
     status;
 
-  status=0;
+  status=MagickTrue;
   if (file == (FILE *) NULL)
     file=stdout;
   options=GetConfigureOptions(ThresholdsFilename,exception);
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index ebe0920..933154d 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -8613,7 +8613,7 @@
     return(MagickTrue);
   (void) SetImageInfoProgressMonitor(image_info,(MagickProgressMonitor) NULL,
     (void *) NULL);
-  status=0;
+  status=MagickTrue;
 #if 0
   (void) FormatLocaleFile(stderr, "mogrify start %s %d (%s)\n",argv[0],argc,
     post?"post":"pre");
diff --git a/coders/jpeg.c b/coders/jpeg.c
index 27b1955..e782190 100644
--- a/coders/jpeg.c
+++ b/coders/jpeg.c
@@ -594,11 +594,9 @@
   */
   for (i=0; i < 4; i++)
     (void) GetCharacter(jpeg_info);
-  if (length <= 4)
+  if (length <= 11)
     return(TRUE);
   length-=4;
-  if (length <= 7)
-    return(TRUE);
   error_manager=(ErrorManager *) jpeg_info->client_data;
   exception=error_manager->exception;
   image=error_manager->image;
diff --git a/tests/validate.c b/tests/validate.c
index 34cd743..34f9411 100644
--- a/tests/validate.c
+++ b/tests/validate.c
@@ -1210,7 +1210,7 @@
     for (j=0; j < (ssize_t) number_arguments; j++)
       arguments[j]=DestroyString(arguments[j]);
     arguments=(char **) RelinquishMagickMemory(arguments);
-    if (status != MagickFalse)
+    if (status == MagickFalse)
       {
         (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n",
           GetMagickModule());
@@ -1302,7 +1302,7 @@
     for (j=0; j < (ssize_t) number_arguments; j++)
       arguments[j]=DestroyString(arguments[j]);
     arguments=(char **) RelinquishMagickMemory(arguments);
-    if (status != MagickFalse)
+    if (status == MagickFalse)
       {
         (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n",
           GetMagickModule());
@@ -1393,7 +1393,7 @@
     for (j=0; j < (ssize_t) number_arguments; j++)
       arguments[j]=DestroyString(arguments[j]);
     arguments=(char **) RelinquishMagickMemory(arguments);
-    if (status != MagickFalse)
+    if (status == MagickFalse)
       {
         (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n",
           GetMagickModule());
@@ -1485,7 +1485,7 @@
     for (j=0; j < (ssize_t) number_arguments; j++)
       arguments[j]=DestroyString(arguments[j]);
     arguments=(char **) RelinquishMagickMemory(arguments);
-    if (status != MagickFalse)
+    if (status == MagickFalse)
       {
         (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n",
           GetMagickModule());
@@ -2268,7 +2268,7 @@
     for (j=0; j < (ssize_t) number_arguments; j++)
       arguments[j]=DestroyString(arguments[j]);
     arguments=(char **) RelinquishMagickMemory(arguments);
-    if (status != MagickFalse)
+    if (status == MagickFalse)
       {
         (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n",
             GetMagickModule());
@@ -2359,7 +2359,7 @@
     for (j=0; j < (ssize_t) number_arguments; j++)
       arguments[j]=DestroyString(arguments[j]);
     arguments=(char **) RelinquishMagickMemory(arguments);
-    if (status != MagickFalse)
+    if (status == MagickFalse)
       {
         (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n",
             GetMagickModule());
diff --git a/utilities/animate.c b/utilities/animate.c
index 8a9e4f9..e841f4a 100644
--- a/utilities/animate.c
+++ b/utilities/animate.c
@@ -86,7 +86,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -111,6 +111,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/compare.c b/utilities/compare.c
index d45705f..43fbf90 100644
--- a/utilities/compare.c
+++ b/utilities/compare.c
@@ -91,7 +91,7 @@
   MagickCoreTerminus();
   if (dissimilar != MagickFalse)
     return(1);
-  return(status == MagickFalse ? 0 : 2);
+  return(status != MagickFalse ? 0 : 2);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -116,6 +116,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 2);
 }
 #endif
diff --git a/utilities/composite.c b/utilities/composite.c
index e9bdc04..7274ba0 100644
--- a/utilities/composite.c
+++ b/utilities/composite.c
@@ -77,7 +77,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -102,6 +102,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/conjure.c b/utilities/conjure.c
index 04f7179..9be9d94 100644
--- a/utilities/conjure.c
+++ b/utilities/conjure.c
@@ -96,7 +96,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -121,6 +121,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/convert.c b/utilities/convert.c
index 0b4c766..7e496f2 100644
--- a/utilities/convert.c
+++ b/utilities/convert.c
@@ -83,7 +83,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -108,6 +108,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/display.c b/utilities/display.c
index acbf3dd..6c57948 100644
--- a/utilities/display.c
+++ b/utilities/display.c
@@ -91,7 +91,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -116,6 +116,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/identify.c b/utilities/identify.c
index 0a3b99b..80ad301 100644
--- a/utilities/identify.c
+++ b/utilities/identify.c
@@ -84,7 +84,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -109,6 +109,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/import.c b/utilities/import.c
index 854dc38..f66b990 100644
--- a/utilities/import.c
+++ b/utilities/import.c
@@ -83,7 +83,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -108,6 +108,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/magick.c b/utilities/magick.c
index ebaee27..ef06511 100644
--- a/utilities/magick.c
+++ b/utilities/magick.c
@@ -76,7 +76,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -101,6 +101,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/mogrify.c b/utilities/mogrify.c
index 1f20a3d..6e552bf 100644
--- a/utilities/mogrify.c
+++ b/utilities/mogrify.c
@@ -79,7 +79,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -104,6 +104,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/montage.c b/utilities/montage.c
index aba7fc0..fbd83fa 100644
--- a/utilities/montage.c
+++ b/utilities/montage.c
@@ -79,7 +79,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -104,6 +104,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
diff --git a/utilities/stream.c b/utilities/stream.c
index 3dd2c29..559ecc7 100644
--- a/utilities/stream.c
+++ b/utilities/stream.c
@@ -79,7 +79,7 @@
   image_info=DestroyImageInfo(image_info);
   exception=DestroyExceptionInfo(exception);
   MagickCoreTerminus();
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 
 #if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__)
@@ -104,6 +104,6 @@
   for (i=0; i < argc; i++)
     utf8[i]=DestroyString(utf8[i]);
   utf8=(char **) RelinquishMagickMemory(utf8);
-  return(status == MagickFalse ? 0 : 1);
+  return(status != MagickFalse ? 0 : 1);
 }
 #endif
