Program: 25663
Project: 25663
Buggy source:
private static void hook(final XHook hook,ClassLoader classLoader,String secret){
  Hook md=PrivacyManager.getHook(hook.getRestrictionName(),hook.getSpecifier());
  if (md == null) {
    String message="String_Node_Str" + hook;
    mListHookError.add(message);
    Util.log(hook,Log.ERROR,message);
  }
 else   if (!md.isAvailable())   return;
  if (secret == null)   Util.log(hook,Log.ERROR,"String_Node_Str" + hook);
  hook.setSecret(secret);
  try {
    Class<?> hookClass=null;
    try {
      hookClass=findClass(hook.getClassName(),classLoader);
    }
 catch (    Throwable ex) {
      String message="String_Node_Str" + hook;
      int level=(md != null && md.isOptional() ? Log.WARN : Log.ERROR);
      if ("String_Node_Str".equals(hook.getMethodName()))       level=Log.WARN;
      if (level == Log.ERROR)       mListHookError.add(message);
      Util.log(hook,level,message);
      Util.logStack(hook,level);
      return;
    }
    List<Member> listMember=new ArrayList<Member>();
    Class<?> clazz=hookClass;
    while (clazz != null && !"String_Node_Str".equals(clazz.getName()))     try {
      if (hook.getMethodName() == null) {
        for (        Constructor<?> constructor : clazz.getDeclaredConstructors())         if (!Modifier.isAbstract(constructor.getModifiers()) && Modifier.isPublic(constructor.getModifiers()) ? hook.isVisible() : !hook.isVisible())         listMember.add(constructor);
        break;
      }
 else {
        for (        Method method : clazz.getDeclaredMethods())         if (method.getName().equals(hook.getMethodName()) && !Modifier.isAbstract(method.getModifiers()) && (Modifier.isPublic(method.getModifiers()) ? hook.isVisible() : !hook.isVisible()))         listMember.add(method);
      }
      clazz=clazz.getSuperclass();
    }
 catch (    Throwable ex) {
      if (ex.getClass().equals(ClassNotFoundException.class))       break;
 else       throw ex;
    }
    for (    Member member : listMember)     try {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)       if ((member.getModifiers() & Modifier.NATIVE) != 0)       Util.log(hook,Log.WARN,"String_Node_Str" + member);
      XposedBridge.hookMethod(member,new XMethodHook(hook));
    }
 catch (    NoSuchFieldError ex) {
      Util.log(hook,Log.WARN,ex.toString());
    }
catch (    Throwable ex) {
      mListHookError.add(ex.toString());
      Util.bug(hook,ex);
    }
    if (listMember.isEmpty() && !hook.getClassName().startsWith("String_Node_Str")) {
      String message="String_Node_Str" + hook;
      int level=(md != null && md.isOptional() ? Log.WARN : Log.ERROR);
      if ("String_Node_Str".equals(hook.getMethodName()))       level=Log.WARN;
      if (level == Log.ERROR)       mListHookError.add(message);
      Util.log(hook,level,message);
      Util.logStack(hook,level);
    }
  }
 catch (  Throwable ex) {
    mListHookError.add(ex.toString());
    Util.bug(hook,ex);
  }
}

Fixed version (ground truth):
private static void hook(final XHook hook,ClassLoader classLoader,String secret){
  Hook md=PrivacyManager.getHook(hook.getRestrictionName(),hook.getSpecifier());
  if (md == null) {
    String message="String_Node_Str" + hook;
    mListHookError.add(message);
    Util.log(hook,Log.ERROR,message);
  }
 else   if (!md.isAvailable())   return;
  if (secret == null)   Util.log(hook,Log.ERROR,"String_Node_Str" + hook);
  hook.setSecret(secret);
  try {
    Class<?> hookClass=null;
    try {
      hookClass=findClass(hook.getClassName(),classLoader);
    }
 catch (    Throwable ex) {
      String message="String_Node_Str" + hook;
      int level=(md != null && md.isOptional() ? Log.WARN : Log.ERROR);
      if ("String_Node_Str".equals(hook.getMethodName()))       level=Log.WARN;
      if (level == Log.ERROR)       mListHookError.add(message);
      Util.log(hook,level,message);
      Util.logStack(hook,level);
      return;
    }
    List<Member> listMember=new ArrayList<Member>();
    Class<?> clazz=hookClass;
    while (clazz != null && !"String_Node_Str".equals(clazz.getName()))     try {
      if (hook.getMethodName() == null) {
        for (        Constructor<?> constructor : clazz.getDeclaredConstructors())         if (!Modifier.isAbstract(constructor.getModifiers()) && Modifier.isPublic(constructor.getModifiers()) ? hook.isVisible() : !hook.isVisible())         listMember.add(constructor);
        break;
      }
 else {
        for (        Method method : clazz.getDeclaredMethods())         if (method.getName().equals(hook.getMethodName()) && !Modifier.isAbstract(method.getModifiers()) && (Modifier.isPublic(method.getModifiers()) ? hook.isVisible() : !hook.isVisible()))         listMember.add(method);
      }
      clazz=clazz.getSuperclass();
    }
 catch (    Throwable ex) {
      if (ex.getClass().equals(ClassNotFoundException.class) || ex.getClass().equals(NoClassDefFoundError.class))       break;
 else       throw ex;
    }
    for (    Member member : listMember)     try {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)       if ((member.getModifiers() & Modifier.NATIVE) != 0)       Util.log(hook,Log.WARN,"String_Node_Str" + member);
      XposedBridge.hookMethod(member,new XMethodHook(hook));
    }
 catch (    NoSuchFieldError ex) {
      Util.log(hook,Log.WARN,ex.toString());
    }
catch (    Throwable ex) {
      mListHookError.add(ex.toString());
      Util.bug(hook,ex);
    }
    if (listMember.isEmpty() && !hook.getClassName().startsWith("String_Node_Str")) {
      String message="String_Node_Str" + hook;
      int level=(md != null && md.isOptional() ? Log.WARN : Log.ERROR);
      if ("String_Node_Str".equals(hook.getMethodName()))       level=Log.WARN;
      if (level == Log.ERROR)       mListHookError.add(message);
      Util.log(hook,level,message);
      Util.logStack(hook,level);
    }
  }
 catch (  Throwable ex) {
    mListHookError.add(ex.toString());
    Util.bug(hook,ex);
  }
}