rem: invalid |= SSIZE_MAX < n;
add: invalid |= ! (0 < n && n <= MAX_BLOCKSIZE);
context: scanargs (int argc, char **argv){  int i;  --argc;  ++argv;  for (i = optind; i < argc; i++)    {      char *name, *val;      name = argv[i];      val = strchr (name, '=');      if (val == NULL)	{	  error (0, 0, _("unrecognized option %s"), quote (name));	  usage (EXIT_FAILURE);	}      *val++ = '\0';      if (STREQ (name, "if"))	input_file = val;      else if (STREQ (name, "of"))	output_file = val;      else if (STREQ (name, "conv"))	parse_conversion (val);      else	{	  int invalid = 0;	  uintmax_t n = parse_integer (val, &invalid);	  if (STREQ (name, "ibs"))	    {	      /* Ensure that each blocksize is <= SSIZE_MAX.  */	      invalid |= SSIZE_MAX < n;	      input_blocksize = n;	      invalid |= input_blocksize != n || input_blocksize == 0;	      conversions_mask |= C_TWOBUFS;	    }	  else if (STREQ (name, "obs"))	    {	      /* Ensure that each blocksize is <= SSIZE_MAX.  */	      invalid |= SSIZE_MAX < n;	      output_blocksize = n;	      invalid |= output_blocksize != n || output_blocksize == 0;	      conversions_mask |= C_TWOBUFS;	    }	  else if (STREQ (name, "bs"))	    {	      /* Ensure that each blocksize is <= SSIZE_MAX.  */	      invalid |= SSIZE_MAX < n;	      output_blocksize = input_blocksize = n;	      invalid |= output_blocksize != n || output_blocksize == 0;	    }	  else if (STREQ (name, "cbs"))	    {	      conversion_blocksize = n;	      invalid |= (conversion_blocksize != n			  || conversion_blocksize == 0);	    }	  else if (STREQ (name, "skip"))	    skip_records = n;	  else if (STREQ (name, "seek"))	    seek_records = n;	  else if (STREQ (name, "count"))	    max_records = n;	  else	    {	      error (0, 0, _("unrecognized option %s=%s"),		     quote_n (0, name), quote_n (1, val));	      usage (EXIT_FAILURE);	    }	  if (invalid)	    error (EXIT_FAILURE, 0, _("invalid number %s"), quote (val));	}    }  /* If bs= was given, both `input_blocksize' and `output_blocksize' will     have been set to positive values.  If either has not been set,     bs= was not given, so make sure two buffers are used. */  if (input_blocksize == 0 || output_blocksize == 0)    conversions_mask |= C_TWOBUFS;  if (input_blocksize == 0)    input_blocksize = DEFAULT_BLOCKSIZE;  if (output_blocksize == 0)    output_blocksize = DEFAULT_BLOCKSIZE;  if (conversion_blocksize == 0)    conversions_mask &= ~(C_BLOCK | C_UNBLOCK);}