Program: 15595
Project: 15595
Buggy source:
void setupTag(Object tag,Map args,ObjectWrapper wrapper) throws TemplateModelException, InvocationTargetException, IllegalAccessException {
  BeansWrapper bwrapper=wrapper instanceof BeansWrapper ? (BeansWrapper)wrapper : BeansWrapper.getDefaultInstance();
  if (args != null && !args.isEmpty()) {
    Object[] aarg=new Object[1];
    for (Iterator iter=args.entrySet().iterator(); iter.hasNext(); ) {
      Map.Entry entry=(Map.Entry)iter.next();
      Object arg=bwrapper.unwrap((TemplateModel)entry.getValue());
      aarg[0]=arg;
      Method m=(Method)propertySetters.get(entry.getKey());
      if (m == null) {
        if (dynaSetter == null) {
          throw new TemplateModelException("String_Node_Str" + StringUtil.jQuote(entry.getKey().toString()) + "String_Node_Str"+ tagClass.getName());
        }
 else {
          dynaSetter.invoke(tag,new Object[]{null,entry.getKey(),aarg[0]});
        }
      }
 else {
        if (arg instanceof BigDecimal) {
          aarg[0]=BeansWrapper.coerceBigDecimal((BigDecimal)arg,m.getParameterTypes()[0]);
        }
        m.invoke(tag,aarg);
      }
    }
  }
}

Fixed version (ground truth):
void setupTag(Object tag,Map args,ObjectWrapper wrapper) throws TemplateModelException, InvocationTargetException, IllegalAccessException {
  BeansWrapper bwrapper=wrapper instanceof BeansWrapper ? (BeansWrapper)wrapper : BeansWrapper.getDefaultInstance();
  if (args != null && !args.isEmpty()) {
    final Object[] argArray=new Object[1];
    for (Iterator iter=args.entrySet().iterator(); iter.hasNext(); ) {
      final Map.Entry entry=(Map.Entry)iter.next();
      final Object arg=bwrapper.unwrap((TemplateModel)entry.getValue());
      argArray[0]=arg;
      final Object paramName=entry.getKey();
      Method setterMethod=(Method)propertySetters.get(paramName);
      if (setterMethod == null) {
        if (dynaSetter == null) {
          throw new TemplateModelException("String_Node_Str" + StringUtil.jQuote(paramName.toString()) + "String_Node_Str"+ tagClass.getName());
        }
 else {
          dynaSetter.invoke(tag,new Object[]{null,paramName,argArray[0]});
        }
      }
 else {
        if (arg instanceof BigDecimal) {
          argArray[0]=BeansWrapper.coerceBigDecimal((BigDecimal)arg,setterMethod.getParameterTypes()[0]);
        }
        try {
          setterMethod.invoke(tag,argArray);
        }
 catch (        IllegalArgumentException e) {
          final Class setterType=setterMethod.getParameterTypes()[0];
          final _ErrorDescriptionBuilder desc=new _ErrorDescriptionBuilder(new Object[]{"String_Node_Str",new _DelayedJQuote(paramName),"String_Node_Str",new _DelayedShortClassName(setterType) + "String_Node_Str",(argArray[0] != null ? (Object)new _DelayedShortClassName(argArray[0].getClass()) : "String_Node_Str"),"String_Node_Str"});
          if (!(setterType.isAssignableFrom(String.class)) && argArray[0] != null && argArray[0] instanceof String) {
            desc.tip(new Object[]{"String_Node_Str" + "String_Node_Str" + "String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"});
          }
          throw new _TemplateModelException(e,null,desc);
        }
      }
    }
  }
}