Program: 45292
Project: 45292
Buggy source:
private int parseArgument(String[] args,int position,boolean argStop) throws CliArgumentParseException {
  if (!argStop) {
    for (    CliArgument argument : arguments) {
      if (argument == defaultArgument) {
        continue;
      }
      if (args[position].startsWith(argument.getShortName())) {
        if (args[position].length() != argument.getShortName().length()) {
          return parseShortNameWithAppend(args,position,argument);
        }
        try {
          argument.parse(buildParamsForArgument(args,position + 1,argument));
        }
 catch (        CliArgumentParseException e) {
          e.setArgsNum(position);
          e.setArgsPos(1);
          throw e;
        }
        int readedParsed=parseTypeRead(args,position + 1 + argument.getNumberOfParams(),argument);
        return readedParsed + argument.getNumberOfParams();
      }
      if (typeScanLongName && argument.getNumberOfParams() == 1) {
        if (args[position].startsWith(argument.getName() + "String_Node_Str")) {
          return parseLongName(argument,argument.getName(),args[position]);
        }
        List<String> hnames=argument.getHiddenNames();
        for (        String name : hnames) {
          if (args[position].startsWith(name + "String_Node_Str")) {
            return parseLongName(argument,name,args[position]);
          }
        }
      }
      if (args[position].equals(argument.getName())) {
        argument.parse(buildParamsForArgument(args,position + 1,argument));
        int readedParsed=parseTypeRead(args,position + argument.getNumberOfParams(),argument);
        return readedParsed + argument.getNumberOfParams();
      }
      List<String> hnames=argument.getHiddenNames();
      for (      String name : hnames) {
        if (args[position].equals(name)) {
          argument.parse(buildParamsForArgument(args,position + 1,argument));
          int readedParsed=parseTypeRead(args,position + argument.getNumberOfParams(),argument);
          return readedParsed + argument.getNumberOfParams();
        }
      }
    }
  }
  defaultArgument.parse(buildParamsForArgument(args,position,defaultArgument));
  return defaultArgument.getNumberOfParams();
}

Fixed version (ground truth):
private int parseArgument(String[] args,int position,boolean argStop) throws CliArgumentParseException {
  if (!argStop) {
    for (    CliArgument argument : arguments) {
      if (argument == defaultArgument) {
        continue;
      }
      if (args[position].startsWith(argument.getShortName())) {
        if (args[position].length() != argument.getShortName().length()) {
          return parseShortNameWithAppend(args,position,argument);
        }
        try {
          argument.parse(buildParamsForArgument(args,position + 1,argument));
        }
 catch (        CliArgumentParseException e) {
          e.setArgsNum(position);
          e.setArgsPos(1);
          throw e;
        }
        int readedParsed=parseTypeRead(args,position + 1 + argument.getNumberOfParams(),argument);
        return readedParsed + argument.getNumberOfParams();
      }
      if (typeScanLongName && argument.getNumberOfParams() == 1) {
        if (args[position].startsWith(argument.getName() + "String_Node_Str")) {
          parseLongName(argument,argument.getName(),args[position]);
          return 0;
        }
        List<String> hnames=argument.getHiddenNames();
        for (        String name : hnames) {
          if (args[position].startsWith(name + "String_Node_Str")) {
            return parseLongName(argument,name,args[position]);
          }
        }
      }
      if (args[position].equals(argument.getName())) {
        argument.parse(buildParamsForArgument(args,position + 1,argument));
        int readedParsed=parseTypeRead(args,position + argument.getNumberOfParams(),argument);
        return readedParsed + argument.getNumberOfParams();
      }
      List<String> hnames=argument.getHiddenNames();
      for (      String name : hnames) {
        if (args[position].equals(name)) {
          argument.parse(buildParamsForArgument(args,position + 1,argument));
          int readedParsed=parseTypeRead(args,position + argument.getNumberOfParams(),argument);
          return readedParsed + argument.getNumberOfParams();
        }
      }
    }
  }
  defaultArgument.parse(buildParamsForArgument(args,position,defaultArgument));
  return defaultArgument.getNumberOfParams();
}