Program: 49908
Project: 49908
Buggy source:
private Object doGetValue(Object obj){
  if (obj instanceof MapEntry) {
    obj=((MapEntry)obj).getValue();
  }
  if (obj == null)   return null;
  try {
    if (getter == null) {
      Getter parent=null;
      Class clazz=obj.getClass();
      List<String> possibleMethodNames=new ArrayList<String>(3);
      for (      final String name : input.split("String_Node_Str")) {
        Getter localGetter=null;
        possibleMethodNames.clear();
        possibleMethodNames.add(name);
        final String camelName=Character.toUpperCase(name.charAt(0)) + name.substring(1);
        possibleMethodNames.add("String_Node_Str" + camelName);
        possibleMethodNames.add("String_Node_Str" + camelName);
        for (        String methodName : possibleMethodNames) {
          try {
            final Method method=clazz.getMethod(methodName,null);
            method.setAccessible(true);
            localGetter=new MethodGetter(parent,method);
            clazz=method.getReturnType();
            break;
          }
 catch (          NoSuchMethodException ignored) {
          }
        }
        if (localGetter == null) {
          try {
            final Field field=clazz.getField(name);
            localGetter=new FieldGetter(parent,field);
            clazz=field.getType();
          }
 catch (          NoSuchFieldException ignored) {
          }
        }
        if (localGetter == null) {
          Class c=clazz;
          while (!Object.class.equals(c)) {
            try {
              final Field field=c.getDeclaredField(name);
              field.setAccessible(true);
              localGetter=new FieldGetter(parent,field);
              clazz=field.getType();
              break;
            }
 catch (            NoSuchFieldException ignored) {
              c=c.getSuperclass();
            }
          }
        }
        if (localGetter == null) {
          throw new RuntimeException("String_Node_Str" + name + "String_Node_Str");
        }
        parent=localGetter;
      }
      getter=parent;
    }
    return getter.getValue(obj);
  }
 catch (  Throwable e) {
    throw new RuntimeException(e);
  }
}

Fixed version (ground truth):
private Object doGetValue(Object obj){
  if (obj instanceof MapEntry) {
    obj=((MapEntry)obj).getValue();
  }
  if (obj == null)   return null;
  try {
    if (getter == null) {
      Getter parent=null;
      Class clazz=obj.getClass();
      List<String> possibleMethodNames=new ArrayList<String>(3);
      for (      final String name : input.split("String_Node_Str")) {
        Getter localGetter=null;
        possibleMethodNames.clear();
        possibleMethodNames.add(name);
        final String camelName=Character.toUpperCase(name.charAt(0)) + name.substring(1);
        possibleMethodNames.add("String_Node_Str" + camelName);
        possibleMethodNames.add("String_Node_Str" + camelName);
        if (name.equals("String_Node_Str")) {
          localGetter=new ThisGetter(parent,obj);
        }
 else {
          for (          String methodName : possibleMethodNames) {
            try {
              final Method method=clazz.getMethod(methodName,null);
              method.setAccessible(true);
              localGetter=new MethodGetter(parent,method);
              clazz=method.getReturnType();
              break;
            }
 catch (            NoSuchMethodException ignored) {
            }
          }
          if (localGetter == null) {
            try {
              final Field field=clazz.getField(name);
              localGetter=new FieldGetter(parent,field);
              clazz=field.getType();
            }
 catch (            NoSuchFieldException ignored) {
            }
          }
          if (localGetter == null) {
            Class c=clazz;
            while (!Object.class.equals(c)) {
              try {
                final Field field=c.getDeclaredField(name);
                field.setAccessible(true);
                localGetter=new FieldGetter(parent,field);
                clazz=field.getType();
                break;
              }
 catch (              NoSuchFieldException ignored) {
                c=c.getSuperclass();
              }
            }
          }
        }
        if (localGetter == null) {
          throw new RuntimeException("String_Node_Str" + name + "String_Node_Str");
        }
        parent=localGetter;
      }
      getter=parent;
    }
    return getter.getValue(obj);
  }
 catch (  Throwable e) {
    throw new RuntimeException(e);
  }
}