Program: 58395
Project: 58395
Buggy source:
@Override public byte[] transform(String name,String transformedName,byte[] bytes){
  if (bytes == null) {
    return null;
  }
  ClassReader classReader=new ClassReader(bytes);
  l: {
    String owner=classReader.getClassName(), zuper=classReader.getSuperName();
    superClasses.put(owner,zuper);
    if (!superClasses.containsKey(zuper)) {
      superClasses.put(zuper,null);
      try {
        Class.forName(zuper.replace('/','.'),false,ASMCore.class.getClassLoader());
      }
 catch (      Throwable e) {
        throw new RuntimeException(e);
      }
    }
    for (; owner != null; owner=superClasses.get(owner)) {
      if (modifiers.containsKey(owner)) {
        break l;
      }
    }
    return bytes;
  }
  ClassNode cn=new ClassNode();
  classReader.accept(cn,0);
  Modifier m=classAccess.get(cn.name);
  if (m != null) {
    cn.access=m.getFixedAccess(cn.access);
  }
  if (cn.innerClasses != null) {
    for (    InnerClassNode in : cn.innerClasses) {
      m=classAccess.get(in.name);
      if (m != null) {
        in.access=m.getFixedAccess(in.access);
      }
    }
  }
  for (  FieldNode fn : cn.fields) {
    m=fieldAccess.get(cn.name + '/' + fn.name);
    if (m != null) {
      fn.access=m.getFixedAccess(fn.access);
    }
    m=fieldAccess.get(cn.name + "String_Node_Str");
    if (m != null) {
      fn.access=m.getFixedAccess(fn.access);
    }
  }
  List<MethodNode> nowOverridable=Lists.newArrayList();
  for (  MethodNode mn : cn.methods) {
    int access=mn.access;
    for (String owner=cn.name; owner != null; owner=superClasses.get(owner)) {
      m=methodAccess.get(owner + '/' + mn.name+ mn.desc);
      if (m != null) {
        access=m.getFixedAccess(access);
      }
      m=methodAccess.get(owner + "String_Node_Str");
      if (m != null) {
        access=m.getFixedAccess(access);
      }
    }
    if ((mn.access & ACC_PRIVATE) != 0 && (access & ACC_PRIVATE) == 0) {
      nowOverridable.add(mn);
    }
    mn.access=access;
  }
  replaceInvokeSpecial(cn,nowOverridable);
  ClassWriter writer=new ClassWriter(ClassWriter.COMPUTE_MAXS);
  cn.accept(writer);
  return writer.toByteArray();
}

Fixed version (ground truth):
@Override public byte[] transform(String name,String transformedName,byte[] bytes){
  if (bytes == null) {
    return null;
  }
  ClassReader classReader=new ClassReader(bytes);
  l: {
    String owner=classReader.getClassName(), zuper=classReader.getSuperName();
    superClasses.put(owner,zuper);
    while (!superClasses.containsKey(zuper)) {
      superClasses.put(zuper,null);
      try {
        byte[] b=LoadingPlugin.loader.getClassBytes(zuper.replace('/','.'));
        if (b != null) {
          String s=zuper;
          zuper=new ClassReader(b).getSuperName();
          superClasses.put(s,zuper);
        }
      }
 catch (      Throwable e) {
        throw new RuntimeException(e);
      }
    }
    for (; owner != null; owner=superClasses.get(owner)) {
      if (modifiers.containsKey(owner)) {
        break l;
      }
    }
    return bytes;
  }
  ClassNode cn=new ClassNode();
  classReader.accept(cn,0);
  Modifier m=classAccess.get(cn.name);
  if (m != null) {
    cn.access=m.getFixedAccess(cn.access);
  }
  if (cn.innerClasses != null) {
    for (    InnerClassNode in : cn.innerClasses) {
      m=classAccess.get(in.name);
      if (m != null) {
        in.access=m.getFixedAccess(in.access);
      }
    }
  }
  for (  FieldNode fn : cn.fields) {
    m=fieldAccess.get(cn.name + '/' + fn.name);
    if (m != null) {
      fn.access=m.getFixedAccess(fn.access);
    }
    m=fieldAccess.get(cn.name + "String_Node_Str");
    if (m != null) {
      fn.access=m.getFixedAccess(fn.access);
    }
  }
  List<MethodNode> nowOverridable=Lists.newArrayList();
  for (  MethodNode mn : cn.methods) {
    int access=mn.access;
    for (String owner=cn.name; owner != null; owner=superClasses.get(owner)) {
      m=methodAccess.get(owner + '/' + mn.name+ mn.desc);
      if (m != null) {
        access=m.getFixedAccess(access);
      }
      m=methodAccess.get(owner + "String_Node_Str");
      if (m != null) {
        access=m.getFixedAccess(access);
      }
    }
    if ((mn.access & ACC_PRIVATE) != 0 && (access & ACC_PRIVATE) == 0) {
      nowOverridable.add(mn);
    }
    mn.access=access;
  }
  replaceInvokeSpecial(cn,nowOverridable);
  ClassWriter writer=new ClassWriter(ClassWriter.COMPUTE_MAXS);
  cn.accept(writer);
  return writer.toByteArray();
}