anchor.diff:  
   					// the path is valid if the input matches the canonical path
   					if(!arguments.input.equals(cpath.toLowerCase())) {
  -						throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(ESAPI=variables.ESAPI, userMessage=arguments.context & ": Invalid file name", logMessage="Invalid directory name does not match the canonical path: context=" & arguments.context & ", input=" & arguments.input & ", canonical=" & canonical, context=arguments.context));
  +						userParams = [arguments.context];
  +						logParams = [arguments.context, arguments.input, canonical];
  +						throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(ESAPI=variables.ESAPI, userMessage=variables.ESAPI.resourceBundle().messageFormat("Validator.fileNamePatternMismatch.userMessage", userParams), logMessage=variables.ESAPI.resourceBundle().messageFormat("Validator.fileNamePatternMismatch.logMessage", logParams), context=arguments.context));
   					}
   				}
   				catch(java.io.IOException e) {
  -					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, arguments.context & ": Invalid file name", "Invalid file name does not exist: context=" & arguments.context & ", canonical=" & canonical, e, arguments.context));
  +					userParams = [arguments.context];
  +					logParams = [arguments.context, canonical];
  +					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, variables.ESAPI.resourceBundle().messageFormat("Validator.fileNameBadInput.userMessage", userParams), variables.ESAPI.resourceBundle().messageFormat("Validator.fileNameBadInput.logMessage", logParams), e, arguments.context));
   				}
   				catch(org.owasp.esapi.errors.EncodingException ee) {
  -					throwException(createObject("component", "org.owasp.esapi.errors.IntrusionException").init(variables.ESAPI, arguments.context & ": Invalid file name", "Invalid file name: context=" & arguments.context & ", canonical=" & canonical, ee));
  +					userParams = [arguments.context];
  +					logParams = [arguments.context, canonical];
  +					throwException(createObject("component", "org.owasp.esapi.errors.IntrusionException").init(variables.ESAPI, variables.ESAPI.resourceBundle().messageFormat("Validator.fileNameFailure.userMessage", userParams), variables.ESAPI.resourceBundle().messageFormat("Validator.fileNameFailure.logMessage", logParams), ee));
   				}
   
   				// verify extensions
  
positive.code: 					if(isEmptyInput(arguments.input)) {
  						if(arguments.allowNull)
  							return "";
  						throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(ESAPI=variables.ESAPI, userMessage=arguments.context & ": Input file name required", logMessage="Input required: context=" & arguments.context & ", input=" & arguments.input, context=arguments.context));
  					}
  
  					// do basic validation
  
negative.code: 				if(isEmptyInput(arguments.input)) {
  					if(arguments.allowNull)
  						return "";
  					userParams = [arguments.context];
  					logParams = [arguments.context, arguments.input];
  					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, variables.ESAPI.resourceBundle().messageFormat("Validator.creditCardValueMissing.userMessage", userParams), variables.ESAPI.resourceBundle().messageFormat("Validator.creditCardValueMissing.logMessage", logParams), arguments.context));
  				}
  
  				canonical = getValidInput(arguments.context, arguments.input, "CreditCard", variables.MAX_CREDIT_CARD_LENGTH, arguments.allowNull);
  
  				// perform Luhn algorithm checking
  				digitsOnly = newJava("java.lang.StringBuffer").init();
  				c = "";
  				for(i = 0; i < canonical.length(); i++) {
  					c = canonical.charAt(i);
  					if(newJava("java.lang.Character").isDigit(c)) {
  						digitsOnly.append(c);
  					}
  				}
  
  				sum = 0;
  				digit = 0;
  				addend = 0;
  				timesTwo = false;
  
  				for(i = digitsOnly.length() - 1; i >= 0; i--) {
  					digit = newJava("java.lang.Integer").parseInt(digitsOnly.substring(i, i + 1));
  					if(timesTwo) {
  						addend = digit * 2;
  						if(addend > 9) {
  							addend -= 9;
  						}
  					}
  					else {
  						addend = digit;
  					}
  					sum += addend;
  					timesTwo = !timesTwo;
  				}
  
  				modulus = sum % 10;
  				if(modulus != 0) {
  					userParams = [arguments.context];
  					logParams = [arguments.context];
  					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, variables.ESAPI.resourceBundle().messageFormat("Validator.creditCardBadInput.userMessage", userParams), variables.ESAPI.resourceBundle().messageFormat("Validator.creditCardBadInput.logMessage", logParams), arguments.context));
  				}
  
  				return canonical;
  			}
  		</cfscript>
  
  	</cffunction>
  