error checks 'b' to 'colorspace'

diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index c07ec7a..c07a31d 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -423,8 +423,8 @@
   cli_wand->quantize_info=AcquireQuantizeInfo(cli_wand->wand.image_info);
   cli_wand->image_list_stack=(Stack *)NULL;
   cli_wand->image_info_stack=(Stack *)NULL;
-  cli_wand->location="'%s' at unknown";
-  cli_wand->location2="'%s' '%s' at unknown";
+  cli_wand->location="'%s'";      /* option location not known by default */
+  cli_wand->location2="'%s' '%s'";
   cli_wand->filename=cli_wand->wand.name;
   cli_wand->line=0;
   cli_wand->column=0;
@@ -690,6 +690,8 @@
 
              SyncImageSettings() used to set per-image attribute.
           */
+          if (IfSetOption && IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           (void) SetImageOption(_image_info,option+1,ArgOption("0"));
           break;
         }
@@ -707,6 +709,8 @@
              Used by many coders including PNG
              SyncImageSettings() used to set per-image attribute.
           */
+          if (IfSetOption && IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           (void) SetImageOption(_image_info,option+1,ArgOption("0.0"));
           break;
         }
@@ -746,6 +750,8 @@
           MagickSizeType
             limit;
 
+          if (IfSetOption && IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           limit=MagickResourceInfinity;
           if (LocaleCompare("unlimited",arg1) != 0)
             limit=(MagickSizeType) SiPrefixToDoubleInterval(arg1,100.0);
@@ -764,8 +770,15 @@
              This is also applied to images in SimpleImageOperator!!!
              Move it to SyncImageSettings() - or alternative
           */
-          _image_info->channel=(ChannelType) (
-               IfSetOption ? ParseChannelOption(arg1) : DefaultChannels );
+          ssize_t
+            channel = DefaultChannels;
+          if ( IfSetOption ) {
+            channel=ParseChannelOption(arg1);
+            if (channel < 0)
+              CLIWandExceptArgBreak(OptionError,"UnrecognizedChannelType",
+                   option,arg1);
+          }
+          _image_info->channel=(ChannelType) channel;
           break;
         }
       if (LocaleCompare("colorspace",option+1) == 0)
@@ -774,8 +787,13 @@
              But also used as a SimpleImageOperator
              Undefined colorspace means don't modify images on
              read or as a operation */
-          _image_info->colorspace=(ColorspaceType) ParseCommandOption(
-               MagickColorspaceOptions,MagickFalse,ArgOption("undefined"));
+          ssize_t
+            colorspace = ParseCommandOption(MagickColorspaceOptions,
+                 MagickFalse,ArgOption("undefined"));
+          if (colorspace < 0)
+            CLIWandExceptArgBreak(OptionError,"UnrecognizedColorspace",
+                                    option,arg1);
+          _image_info->colorspace=(ColorspaceType) colorspace;
           break;
         }
       if (LocaleCompare("comment",option+1) == 0)
@@ -1647,7 +1665,7 @@
   assert(cli_wand != (MagickCLI *) NULL);
   assert(cli_wand->signature == WandSignature);
   assert(cli_wand->wand.signature == WandSignature);
-  assert(_image != (Image *) NULL);             /* an _image must be present */
+  assert(_image != (Image *) NULL);             /* an image must be present */
   if (cli_wand->wand.debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",cli_wand->wand.name);
 
@@ -1655,7 +1673,7 @@
 
   SetGeometryInfo(&geometry_info);
 
-  new_image = (Image *)NULL; /* the replacement _image, if not null at end */
+  new_image = (Image *)NULL; /* the replacement image, if not null at end */
 
   /* FUTURE: We may need somthing a little more optimized than this!
      Perhaps, do the 'sync' if 'settings tainted' before next operator.
@@ -1753,7 +1771,7 @@
         }
       if (LocaleCompare("auto-orient",option+1) == 0)
         {
-          /* This should probbaly be a MagickCore function */
+          /* This should probably be a MagickCore function */
           switch (_image->orientation)
           {
             case TopRightOrientation:
@@ -1804,20 +1822,27 @@
     {
       if (LocaleCompare("black-threshold",option+1) == 0)
         {
+          if (IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           (void) BlackThresholdImage(_image,arg1,_exception);
           break;
         }
       if (LocaleCompare("blue-shift",option+1) == 0)
         {
           geometry_info.rho=1.5;
-          if (IfNormalOp)
+          if (IfNormalOp) {
+            if (IsGeometry(arg1) == MagickFalse)
+              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
             flags=ParseGeometry(arg1,&geometry_info);
+          }
           new_image=BlueShiftImage(_image,geometry_info.rho,_exception);
           break;
         }
       if (LocaleCompare("blur",option+1) == 0)
         {
           /* FUTURE: use of "bias" in a blur is non-sensible */
+          if (IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           flags=ParseGeometry(arg1,&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
@@ -1835,6 +1860,9 @@
           const char*
             value;
 
+          if (IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
+
           value=GetImageOption(_image_info,"compose");
           if (value != (const char *) NULL)
             compose=(CompositeOperator) ParseCommandOption(
@@ -1860,6 +1888,8 @@
           MagickStatusType
             flags;
 
+          if (IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           flags=ParseGeometry(arg1,&geometry_info);
           brightness=geometry_info.rho;
           contrast=0.0;
@@ -1892,12 +1922,15 @@
         {
           /* The "channel" setting has already been set
              FUTURE: This probably should be part of SyncImageSettings().
+             How is it applied to new images?
           */
           SetPixelChannelMapMask(_image,_image_info->channel);
           break;
         }
       if (LocaleCompare("charcoal",option+1) == 0)
         {
+          if (IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           flags=ParseGeometry(arg1,&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
@@ -1909,6 +1942,8 @@
         }
       if (LocaleCompare("chop",option+1) == 0)
         {
+          if (IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           (void) ParseGravityGeometry(_image,arg1,&geometry,_exception);
           new_image=ChopImage(_image,&geometry,_exception);
           break;
@@ -1954,7 +1989,7 @@
           if (SetImageStorageClass(mask_image,DirectClass,_exception)
                == MagickFalse)
             break;
-          /* Create a write mask from cli_wandp-mask _image */
+          /* Create a write mask from cli_wand mask image */
           /* FUTURE: use Alpha operations instead and create a Grey Image */
           mask_view=AcquireCacheView(mask_image);
           for (y=0; y < (ssize_t) mask_image->rows; y++)
@@ -1989,6 +2024,8 @@
         }
       if (LocaleCompare("colorize",option+1) == 0)
         {
+          if (IsGeometry(arg1) == MagickFalse)
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           new_image=ColorizeImage(_image,arg1,&_draw_info->fill,_exception);
           break;
         }
@@ -1999,19 +2036,19 @@
 
           kernel=AcquireKernelInfo(arg1);
           if (kernel == (KernelInfo *) NULL)
-            break;
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           new_image=ColorMatrixImage(_image,kernel,_exception);
           kernel=DestroyKernelInfo(kernel);
           break;
         }
       if (LocaleCompare("colors",option+1) == 0)
         {
-          /* Reduce the number of colors in the _image.
-             FUTURE: also provide 'plus version with _image 'color counts'
+          /* Reduce the number of colors in the image.
+             FUTURE: also provide 'plus version with image 'color counts'
           */
           _quantize_info->number_colors=StringToUnsignedLong(arg1);
           if (_quantize_info->number_colors == 0)
-            break;
+            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
           if ((_image->storage_class == DirectClass) ||
               _image->colors > _quantize_info->number_colors)
             (void) QuantizeImage(_quantize_info,_image,_exception);
@@ -2021,8 +2058,8 @@
         }
       if (LocaleCompare("colorspace",option+1) == 0)
         {
-          /* WARNING: this is both a _image_info setting (already done)
-                      and a operator to change _image colorspace.
+          /* WARNING: this is both a image_info setting (already done)
+                      and a operator to change image colorspace.
 
              FUTURE: default colorspace should be sRGB!
              Unless some type of 'linear colorspace' mode is set.
@@ -2664,7 +2701,7 @@
               (void) SetImageMask(_image,(Image *) NULL,_exception);
               break;
             }
-          /* Set the _image mask. */
+          /* Set the image mask. */
           mask=GetImageCache(_image_info,arg1,_exception);
           if (mask == (Image *) NULL)
             break;
@@ -3357,7 +3394,7 @@
         {
           /* FUTURE: move to SyncImageSettings() and AcquireImage()???
              three places!   ImageArtifact   ImageOption  _image_info->verbose
-             Some how new images also get this artifact presumably here
+             Some how new images also get this artifact!
           */
           (void) SetImageArtifact(_image,option+1,
                            IfNormalOp ? "true" : "false" );