Program: 32010
Project: 32010
Buggy source:
@SuppressWarnings("String_Node_Str") public Tuple exec(Tuple input) throws IOException {
  if (input == null || input.size() == 0) {
    return null;
  }
  final String rawTag=input.get(tagColumnNum).toString();
  if (!super.tagSet.contains(rawTag)) {
    if (isPigEnabled(Constants.SHIFU_GROUP_COUNTER,"String_Node_Str")) {
      PigStatusReporter.getInstance().getCounter(Constants.SHIFU_GROUP_COUNTER,"String_Node_Str").increment(1);
    }
    return null;
  }
  boolean isNotSampled=DataSampler.isNotSampled(modelConfig.isRegression(),super.tagSet,super.posTagSet,super.negTagSet,modelConfig.getNormalizeSampleRate(),modelConfig.isNormalizeSampleNegOnly(),rawTag);
  if (isNotSampled) {
    return null;
  }
  Tuple tuple=TupleFactory.getInstance().newTuple();
  final NormType normType=modelConfig.getNormalizeType();
  for (int i=0; i < input.size(); i++) {
    ColumnConfig config=columnConfigList.get(i);
    String val=(input.get(i) == null) ? "String_Node_Str" : input.get(i).toString();
    if (weightExpr != null) {
      weightContext.set(config.getColumnName(),val);
    }
    if (tagColumnNum == i) {
      if (modelConfig.isRegression()) {
        String tagType=tagTypeCheck(super.posTagSet,super.negTagSet,rawTag);
        if (tagType == null) {
          log.error("String_Node_Str" + rawTag);
          return null;
        }
        tuple.append(tagType);
      }
 else {
        int index=-1;
        for (int j=0; j < tags.size(); j++) {
          Set<String> tagSet=tags.get(j);
          if (tagSet.contains(rawTag)) {
            index=j;
            break;
          }
        }
        if (index == -1) {
          log.error("String_Node_Str" + rawTag);
          return null;
        }
        tuple.append(index);
      }
      continue;
    }
    if (!CommonUtils.isGoodCandidate(modelConfig.isRegression(),config)) {
      tuple.append(null);
    }
 else {
      if (CommonUtils.isDesicionTreeAlgorithm(this.alg)) {
        Double normVal=0d;
        if (config.isCategorical()) {
          tuple.append(val);
        }
 else {
          try {
            normVal=Double.parseDouble(val);
          }
 catch (          Exception e) {
            log.debug("String_Node_Str" + val + "String_Node_Str");
            normVal=Normalizer.defaultMissingValue(config);
          }
          tuple.append(df.format(normVal));
        }
      }
 else {
        Double normVal=Normalizer.normalize(config,val,cutoff,normType);
        tuple.append(df.format(normVal));
      }
    }
  }
  double weight=evaluateWeight(weightExpr,weightContext);
  tuple.append(weight);
  return tuple;
}

Fixed version (ground truth):
@SuppressWarnings("String_Node_Str") public Tuple exec(Tuple input) throws IOException {
  if (input == null || input.size() == 0) {
    return null;
  }
  final String rawTag=input.get(tagColumnNum).toString();
  if (!super.tagSet.contains(rawTag)) {
    if (isPigEnabled(Constants.SHIFU_GROUP_COUNTER,"String_Node_Str")) {
      PigStatusReporter.getInstance().getCounter(Constants.SHIFU_GROUP_COUNTER,"String_Node_Str").increment(1);
    }
    return null;
  }
  boolean isNotSampled=DataSampler.isNotSampled(modelConfig.isRegression(),super.tagSet,super.posTagSet,super.negTagSet,modelConfig.getNormalizeSampleRate(),modelConfig.isNormalizeSampleNegOnly(),rawTag);
  if (isNotSampled) {
    return null;
  }
  Tuple tuple=TupleFactory.getInstance().newTuple();
  final NormType normType=modelConfig.getNormalizeType();
  for (int i=0; i < input.size(); i++) {
    ColumnConfig config=columnConfigList.get(i);
    String val=(input.get(i) == null) ? "String_Node_Str" : input.get(i).toString().trim();
    if (weightExpr != null) {
      weightContext.set(config.getColumnName(),val);
    }
    if (tagColumnNum == i) {
      if (modelConfig.isRegression()) {
        String tagType=tagTypeCheck(super.posTagSet,super.negTagSet,rawTag);
        if (tagType == null) {
          log.error("String_Node_Str" + rawTag);
          return null;
        }
        tuple.append(tagType);
      }
 else {
        int index=-1;
        for (int j=0; j < tags.size(); j++) {
          Set<String> tagSet=tags.get(j);
          if (tagSet.contains(rawTag)) {
            index=j;
            break;
          }
        }
        if (index == -1) {
          log.error("String_Node_Str" + rawTag);
          return null;
        }
        tuple.append(index);
      }
      continue;
    }
    if (!CommonUtils.isGoodCandidate(modelConfig.isRegression(),config)) {
      tuple.append(null);
    }
 else {
      if (CommonUtils.isDesicionTreeAlgorithm(this.alg)) {
        Double normVal=0d;
        if (config.isCategorical()) {
          int index=config.getBinCategory().indexOf(val);
          if (index == -1) {
            tuple.append("String_Node_Str");
          }
 else {
            tuple.append(val);
          }
        }
 else {
          try {
            normVal=Double.parseDouble(val);
          }
 catch (          Exception e) {
            log.debug("String_Node_Str" + val + "String_Node_Str");
            normVal=Normalizer.defaultMissingValue(config);
          }
          tuple.append(df.format(normVal));
        }
      }
 else {
        Double normVal=Normalizer.normalize(config,val,cutoff,normType);
        tuple.append(df.format(normVal));
      }
    }
  }
  double weight=evaluateWeight(weightExpr,weightContext);
  tuple.append(weight);
  return tuple;
}