diff -Nru cglib-3.2.4/cglib/pom.xml cglib-3.2.5/cglib/pom.xml --- cglib-3.2.4/cglib/pom.xml 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/pom.xml 2017-03-06 19:24:07.000000000 +0000 @@ -9,7 +9,7 @@ cglib cglib-parent - 3.2.4 + 3.2.5 diff -Nru cglib-3.2.4/cglib/src/main/java/net/sf/cglib/core/ReflectUtils.java cglib-3.2.5/cglib/src/main/java/net/sf/cglib/core/ReflectUtils.java --- cglib-3.2.4/cglib/src/main/java/net/sf/cglib/core/ReflectUtils.java 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/src/main/java/net/sf/cglib/core/ReflectUtils.java 2017-03-06 19:24:07.000000000 +0000 @@ -19,6 +19,7 @@ import java.lang.reflect.*; import java.security.AccessController; import java.security.PrivilegedAction; +import java.security.PrivilegedExceptionAction; import java.security.ProtectionDomain; import java.util.*; import org.objectweb.asm.Attribute; @@ -33,41 +34,84 @@ private static final Map primitives = new HashMap(8); private static final Map transforms = new HashMap(8); private static final ClassLoader defaultLoader = ReflectUtils.class.getClassLoader(); - private static Method DEFINE_CLASS; + private static Method DEFINE_CLASS, DEFINE_CLASS_UNSAFE; private static final ProtectionDomain PROTECTION_DOMAIN; + private static final Object UNSAFE; + private static final Throwable THROWABLE; private static final List OBJECT_METHODS = new ArrayList(); static { - PROTECTION_DOMAIN = getProtectionDomain(ReflectUtils.class); - - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - try { - Class loader = Class.forName("java.lang.ClassLoader"); // JVM crash w/o this - DEFINE_CLASS = loader.getDeclaredMethod("defineClass", - new Class[]{ String.class, - byte[].class, - Integer.TYPE, - Integer.TYPE, - ProtectionDomain.class }); - DEFINE_CLASS.setAccessible(true); - } catch (ClassNotFoundException e) { - throw new CodeGenerationException(e); - } catch (NoSuchMethodException e) { - throw new CodeGenerationException(e); + ProtectionDomain protectionDomain; + Method defineClass, defineClassUnsafe; + Object unsafe; + Throwable throwable = null; + try { + protectionDomain = getProtectionDomain(ReflectUtils.class); + try { + defineClass = (Method) AccessController.doPrivileged(new PrivilegedExceptionAction() { + public Object run() throws Exception { + Class loader = Class.forName("java.lang.ClassLoader"); // JVM crash w/o this + Method defineClass = loader.getDeclaredMethod("defineClass", + new Class[]{ String.class, + byte[].class, + Integer.TYPE, + Integer.TYPE, + ProtectionDomain.class }); + defineClass.setAccessible(true); + return defineClass; + } + }); + defineClassUnsafe = null; + unsafe = null; + } catch (Throwable t) { + // Fallback on Jigsaw where this method is not available. + throwable = t; + defineClass = null; + unsafe = AccessController.doPrivileged(new PrivilegedExceptionAction() { + public Object run() throws Exception { + Class u = Class.forName("sun.misc.Unsafe"); + Field theUnsafe = u.getDeclaredField("theUnsafe"); + theUnsafe.setAccessible(true); + return theUnsafe.get(null); + } + }); + Class u = Class.forName("sun.misc.Unsafe"); + defineClassUnsafe = u.getMethod("defineClass", + new Class[]{ String.class, + byte[].class, + Integer.TYPE, + Integer.TYPE, + ClassLoader.class, + ProtectionDomain.class }); + } + AccessController.doPrivileged(new PrivilegedExceptionAction() { + public Object run() throws Exception { + Method[] methods = Object.class.getDeclaredMethods(); + for (Method method : methods) { + if ("finalize".equals(method.getName()) + || (method.getModifiers() & (Modifier.FINAL | Modifier.STATIC)) > 0) { + continue; + } + OBJECT_METHODS.add(method); + } + return null; } - return null; - } - }); - Method[] methods = Object.class.getDeclaredMethods(); - for (Method method : methods) { - if ("finalize".equals(method.getName()) - || (method.getModifiers() & (Modifier.FINAL | Modifier.STATIC)) > 0) { - continue; - } - OBJECT_METHODS.add(method); - } + }); + } catch (Throwable t) { + if (throwable == null) { + throwable = t; + } + protectionDomain = null; + defineClass = null; + defineClassUnsafe = null; + unsafe = null; + } + PROTECTION_DOMAIN = protectionDomain; + DEFINE_CLASS = defineClass; + DEFINE_CLASS_UNSAFE = defineClassUnsafe; + UNSAFE = unsafe; + THROWABLE = throwable; } private static final String[] CGLIB_PACKAGES = { @@ -409,8 +453,16 @@ } public static Class defineClass(String className, byte[] b, ClassLoader loader, ProtectionDomain protectionDomain) throws Exception { - Object[] args = new Object[]{className, b, new Integer(0), new Integer(b.length), protectionDomain }; - Class c = (Class)DEFINE_CLASS.invoke(loader, args); + Class c; + if (DEFINE_CLASS != null) { + Object[] args = new Object[]{className, b, new Integer(0), new Integer(b.length), protectionDomain }; + c = (Class)DEFINE_CLASS.invoke(loader, args); + } else if (DEFINE_CLASS_UNSAFE != null) { + Object[] args = new Object[]{className, b, new Integer(0), new Integer(b.length), loader, protectionDomain }; + c = (Class)DEFINE_CLASS_UNSAFE.invoke(UNSAFE, args); + } else { + throw new CodeGenerationException(THROWABLE); + } // Force static initializers to run. Class.forName(className, true, loader); return c; diff -Nru cglib-3.2.4/cglib/src/main/java/net/sf/cglib/core/TinyBitSet.java cglib-3.2.5/cglib/src/main/java/net/sf/cglib/core/TinyBitSet.java --- cglib-3.2.4/cglib/src/main/java/net/sf/cglib/core/TinyBitSet.java 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/src/main/java/net/sf/cglib/core/TinyBitSet.java 2017-03-06 19:24:07.000000000 +0000 @@ -15,6 +15,7 @@ */ package net.sf.cglib.core; +@Deprecated public class TinyBitSet { private static int[] T = new int[256]; private int value = 0; @@ -29,7 +30,7 @@ } static { - for(int j = 0; j < 256; j++) { + for (int j = 0; j < 256; j++) { T[j] = gcount(j); } } @@ -49,11 +50,16 @@ } return j; } - + public int length() { return log2(topbit(value)); } + /** + * If bit 31 is set then this method results in an infinite loop. + * + * @return the number of bits set to true in this TinyBitSet. + */ public int cardinality() { int w = value; int c = 0; diff -Nru cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/BridgeMethodResolver.java cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/BridgeMethodResolver.java --- cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/BridgeMethodResolver.java 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/BridgeMethodResolver.java 2017-03-06 19:24:07.000000000 +0000 @@ -42,9 +42,11 @@ class BridgeMethodResolver { private final Map/* */declToBridge; + private final ClassLoader classLoader; - public BridgeMethodResolver(Map declToBridge) { + public BridgeMethodResolver(Map declToBridge, ClassLoader classLoader) { this.declToBridge = declToBridge; + this.classLoader = classLoader; } /** @@ -58,7 +60,7 @@ Class owner = (Class)entry.getKey(); Set bridges = (Set)entry.getValue(); try { - new ClassReader(owner.getName()) + new ClassReader(classLoader.getResourceAsStream(owner.getName().replace('.', '/') + ".class")) .accept(new BridgedFinder(bridges, resolved), ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG); } catch(IOException ignored) {} @@ -68,14 +70,14 @@ private static class BridgedFinder extends ClassVisitor { private Map/**/ resolved; - private Set/**/ eligableMethods; + private Set/**/ eligibleMethods; private Signature currentMethod = null; - BridgedFinder(Set eligableMethods, Map resolved) { + BridgedFinder(Set eligibleMethods, Map resolved) { super(Opcodes.ASM5); this.resolved = resolved; - this.eligableMethods = eligableMethods; + this.eligibleMethods = eligibleMethods; } public void visit(int version, int access, String name, @@ -85,7 +87,7 @@ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { Signature sig = new Signature(name, desc); - if (eligableMethods.remove(sig)) { + if (eligibleMethods.remove(sig)) { currentMethod = sig; return new MethodVisitor(Opcodes.ASM5) { public void visitMethodInsn(int opcode, String owner, String name, diff -Nru cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/CallbackGenerator.java cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/CallbackGenerator.java --- cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/CallbackGenerator.java 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/CallbackGenerator.java 2017-03-06 19:24:07.000000000 +0000 @@ -31,6 +31,6 @@ int getIndex(MethodInfo method); void emitCallback(CodeEmitter ce, int index); Signature getImplSignature(MethodInfo method); - void emitInvoke(CodeEmitter e, MethodInfo method); + void emitLoadArgsAndInvoke(CodeEmitter e, MethodInfo method); } } diff -Nru cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/Enhancer.java cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/Enhancer.java --- cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/Enhancer.java 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/Enhancer.java 2017-03-06 19:24:07.000000000 +0000 @@ -1129,7 +1129,7 @@ } } - final Map bridgeToTarget = new BridgeMethodResolver(declToBridge).resolveAll(); + final Map bridgeToTarget = new BridgeMethodResolver(declToBridge, getClassLoader()).resolveAll(); Set seenGen = new HashSet(); CodeEmitter se = ce.getStaticHook(); @@ -1155,19 +1155,22 @@ public Signature getImplSignature(MethodInfo method) { return rename(method.getSignature(), ((Integer)positions.get(method)).intValue()); } - public void emitInvoke(CodeEmitter e, MethodInfo method) { + public void emitLoadArgsAndInvoke(CodeEmitter e, MethodInfo method) { // If this is a bridge and we know the target was called from invokespecial, // then we need to invoke_virtual w/ the bridge target instead of doing // a super, because super may itself be using super, which would bypass // any proxies on the target. Signature bridgeTarget = (Signature)bridgeToTarget.get(method.getSignature()); if (bridgeTarget != null) { - // TODO: this assumes that the target has wider or the same type - // parameters than the current. - // In reality this should always be true because otherwise we wouldn't - // have had a bridge doing an invokespecial. - // If it isn't true, we would need to checkcast each argument - // against the target's argument types + // checkcast each argument against the target's argument types + for (int i = 0; i < bridgeTarget.getArgumentTypes().length; i++) { + e.load_arg(i); + Type target = bridgeTarget.getArgumentTypes()[i]; + if (!target.equals(method.getSignature().getArgumentTypes()[i])) { + e.checkcast(target); + } + } + e.invoke_virtual_this(bridgeTarget); Type retType = method.getSignature().getReturnType(); @@ -1185,6 +1188,7 @@ e.checkcast(retType); } } else { + e.load_args(); e.super_invoke(method.getSignature()); } } diff -Nru cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/MethodInterceptorGenerator.java cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/MethodInterceptorGenerator.java --- cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/MethodInterceptorGenerator.java 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/MethodInterceptorGenerator.java 2017-03-06 19:24:07.000000000 +0000 @@ -139,8 +139,7 @@ e.throw_exception(ABSTRACT_METHOD_ERROR, method.toString() + " is abstract" ); } else { e.load_this(); - e.load_args(); - context.emitInvoke(e, method); + context.emitLoadArgsAndInvoke(e, method); } } diff -Nru cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/NoOpGenerator.java cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/NoOpGenerator.java --- cglib-3.2.4/cglib/src/main/java/net/sf/cglib/proxy/NoOpGenerator.java 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/src/main/java/net/sf/cglib/proxy/NoOpGenerator.java 2017-03-06 19:24:07.000000000 +0000 @@ -32,8 +32,7 @@ TypeUtils.isPublic(method.getModifiers()))) { CodeEmitter e = EmitUtils.begin_method(ce, method); e.load_this(); - e.load_args(); - context.emitInvoke(e, method); + context.emitLoadArgsAndInvoke(e, method); e.return_value(); e.end_method(); } diff -Nru cglib-3.2.4/cglib/src/test/java/net/sf/cglib/core/TestTinyBitSet.java cglib-3.2.5/cglib/src/test/java/net/sf/cglib/core/TestTinyBitSet.java --- cglib-3.2.4/cglib/src/test/java/net/sf/cglib/core/TestTinyBitSet.java 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/src/test/java/net/sf/cglib/core/TestTinyBitSet.java 2017-03-06 19:24:07.000000000 +0000 @@ -15,52 +15,79 @@ */ package net.sf.cglib.core; -import net.sf.cglib.CodeGenTestCase; -import junit.framework.*; +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; public class TestTinyBitSet extends TestCase { + + private TinyBitSet b = new TinyBitSet(); + public void testGetSetClear() { - TinyBitSet b = new TinyBitSet(); - assertTrue(!b.get(5)); - b.set(5); - assertTrue(b.get(5)); - b.clear(5); - assertTrue(!b.get(5)); + // get, set, clear, set bits 0 - 31 + for (int index = 0; index < 32; index++) { + assertFalse(b.get(index)); + b.set(index); + assertTrue(b.get(index)); + b.clear(index); + assertFalse(b.get(index)); + b.set(index); + } + // after setting bits 0-31, get bits 32 and above reports true; + assertTrue(b.get(32)); + assertTrue(b.get(255)); + assertTrue(b.get(256)); + assertTrue(b.get(1000000)); } - + + public void testGetSetClear2() { + for (int index = 2; index > 0; index *= 2) { + b.set(index); + assertTrue(b.get(index)); + b.clear(index); + assertFalse(b.get(index)); + b.set(index); + } + } + public void testLength() { - TinyBitSet b = new TinyBitSet(); + assertEquals(0, b.length()); b.set(10); - assertTrue(b.length() == 11); + assertEquals(11, b.length()); b.set(15); - assertTrue(b.length() == 16); + assertEquals(16, b.length()); b.set(14); - assertTrue(b.length() == 16); + assertEquals(16, b.length()); } public void testCardinality() { - TinyBitSet b = new TinyBitSet(); - assertTrue(b.cardinality() == 0); + assertEquals(0, b.cardinality()); b.set(1); - assertTrue(b.cardinality() == 1); + assertEquals(1, b.cardinality()); b.set(4); - assertTrue(b.cardinality() == 2); + assertEquals(2, b.cardinality()); b.set(10); - assertTrue(b.cardinality() == 3); + assertEquals(3, b.cardinality()); b.set(10); - assertTrue(b.cardinality() == 3); + assertEquals(3, b.cardinality()); b.clear(10); - assertTrue(b.cardinality() == 2); + assertEquals(2, b.cardinality()); + } + + /** Causes infinite loop */ + public void set31InfiniteLoopCardinality() { + b.set(31); + assertEquals(1, b.cardinality()); // infinite loop... } public TestTinyBitSet(String testName) { super(testName); } - + public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } - + public static Test suite() { return new TestSuite(TestTinyBitSet.class); } diff -Nru cglib-3.2.4/cglib/src/test/java/net/sf/cglib/proxy/TestEnhancer.java cglib-3.2.5/cglib/src/test/java/net/sf/cglib/proxy/TestEnhancer.java --- cglib-3.2.4/cglib/src/test/java/net/sf/cglib/proxy/TestEnhancer.java 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib/src/test/java/net/sf/cglib/proxy/TestEnhancer.java 2017-03-06 19:24:07.000000000 +0000 @@ -15,6 +15,7 @@ */ package net.sf.cglib.proxy; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -26,8 +27,9 @@ import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; - +import java.util.Map; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; @@ -38,6 +40,9 @@ import net.sf.cglib.core.Predicate; import net.sf.cglib.core.ReflectUtils; import net.sf.cglib.reflect.FastClass; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; /** *@author Juozas Baliuka @@ -1256,9 +1261,163 @@ intf.aMethod(null); assertEquals(Arrays.asList(Concrete.class), paramTypes); } - - - + + public void testBridgeParameterCheckcast() throws Exception { + + // If the compiler used for Z omits the bridge method, and X is compiled with javac, + // javac will generate an invokespecial bridge in X. + + // public interface I { + // public A f(B b); + // } + // public abstract class Z implements I { + // public U f(Long id) { + // return null; + // } + // } + // public class X extends Z {} + + final Map classes = new HashMap(); + + { + ClassWriter cw = new ClassWriter(0); + cw.visit( + 49, + Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT | Opcodes.ACC_INTERFACE, + "I", + "Ljava/lang/Object;", + "java/lang/Object", + null); + { + MethodVisitor mv = + cw.visitMethod( + Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT, + "f", + "(Ljava/lang/Object;)Ljava/lang/Object;", + "(TB;)TA;", + null); + mv.visitEnd(); + } + cw.visitEnd(); + classes.put("I.class", cw.toByteArray()); + } + { + ClassWriter cw = new ClassWriter(0); + cw.visit( + 49, + Opcodes.ACC_PUBLIC | Opcodes.ACC_SUPER | Opcodes.ACC_ABSTRACT, + "Z", + "Ljava/lang/Object;LI;", + "java/lang/Object", + new String[] {"I"}); + { + MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "", "()V", null, null); + mv.visitCode(); + mv.visitVarInsn(Opcodes.ALOAD, 0); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "", "()V", false); + mv.visitInsn(Opcodes.RETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + } + { + MethodVisitor mv = + cw.visitMethod( + Opcodes.ACC_PUBLIC, + "f", + "(Ljava/lang/String;)Ljava/lang/Number;", + "(Ljava/lang/String;)TU;", + null); + mv.visitCode(); + mv.visitInsn(Opcodes.ACONST_NULL); + mv.visitInsn(Opcodes.ARETURN); + mv.visitMaxs(1, 2); + mv.visitEnd(); + } + cw.visitEnd(); + classes.put("Z.class", cw.toByteArray()); + } + { + ClassWriter cw = new ClassWriter(0); + cw.visit( + 49, Opcodes.ACC_PUBLIC | Opcodes.ACC_SUPER, "X", "LZ;", "Z", null); + { + MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "", "()V", null, null); + mv.visitCode(); + mv.visitVarInsn(Opcodes.ALOAD, 0); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "Z", "", "()V", false); + mv.visitInsn(Opcodes.RETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + } + { + MethodVisitor mv = + cw.visitMethod( + Opcodes.ACC_PUBLIC | Opcodes.ACC_BRIDGE | Opcodes.ACC_SYNTHETIC, + "f", + "(Ljava/lang/Object;)Ljava/lang/Object;", + null, + null); + mv.visitCode(); + mv.visitVarInsn(Opcodes.ALOAD, 0); + mv.visitVarInsn(Opcodes.ALOAD, 1); + mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/String"); + mv.visitMethodInsn( + Opcodes.INVOKESPECIAL, "Z", "f", "(Ljava/lang/String;)Ljava/lang/Number;", false); + mv.visitInsn(Opcodes.ARETURN); + mv.visitMaxs(2, 2); + mv.visitEnd(); + } + + cw.visitEnd(); + + classes.put("X.class", cw.toByteArray()); + } + + ClassLoader classLoader = + new ClassLoader(getClass().getClassLoader()) { + @Override + public InputStream getResourceAsStream(String name) { + InputStream is = super.getResourceAsStream(name); + if (is != null) { + return is; + } + if (classes.containsKey(name)) { + return new ByteArrayInputStream(classes.get(name)); + } + return null; + } + + public Class findClass(String name) throws ClassNotFoundException { + byte[] ba = classes.get(name.replace('.', '/') + ".class"); + if (ba != null) { + return defineClass(name, ba, 0, ba.length); + } + throw new ClassNotFoundException(name); + } + }; + + List retTypes = new ArrayList(); + List paramTypes = new ArrayList(); + Interceptor interceptor = new Interceptor(retTypes, paramTypes); + + Enhancer e = new Enhancer(); + e.setClassLoader(classLoader); + e.setSuperclass(classLoader.loadClass("X")); + e.setCallback(interceptor); + + Object c = e.create(); + + for (Method m : c.getClass().getDeclaredMethods()) { + if (m.getName().equals("f") && m.getReturnType().equals(Object.class)) { + m.invoke(c, new Object[] {null}); + } + } + + // f(Object)Object should bridge to f(Number)String + assertEquals(Arrays.asList(Object.class, Number.class), retTypes); + assertEquals(Arrays.asList(Object.class, String.class), paramTypes); + } + static class ErasedType {} static class RetType extends ErasedType {} static class Refined extends RetType {} diff -Nru cglib-3.2.4/cglib-integration-test/pom.xml cglib-3.2.5/cglib-integration-test/pom.xml --- cglib-3.2.4/cglib-integration-test/pom.xml 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib-integration-test/pom.xml 2017-03-06 19:24:07.000000000 +0000 @@ -9,7 +9,7 @@ cglib cglib-parent - 3.2.4 + 3.2.5 diff -Nru cglib-3.2.4/cglib-jmh/pom.xml cglib-3.2.5/cglib-jmh/pom.xml --- cglib-3.2.4/cglib-jmh/pom.xml 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib-jmh/pom.xml 2017-03-06 19:24:07.000000000 +0000 @@ -7,7 +7,7 @@ cglib-parent cglib - 3.2.4 + 3.2.5 4.0.0 diff -Nru cglib-3.2.4/cglib-nodep/pom.xml cglib-3.2.5/cglib-nodep/pom.xml --- cglib-3.2.4/cglib-nodep/pom.xml 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib-nodep/pom.xml 2017-03-06 19:24:07.000000000 +0000 @@ -9,7 +9,7 @@ cglib cglib-parent - 3.2.4 + 3.2.5 diff -Nru cglib-3.2.4/cglib-sample/pom.xml cglib-3.2.5/cglib-sample/pom.xml --- cglib-3.2.4/cglib-sample/pom.xml 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/cglib-sample/pom.xml 2017-03-06 19:24:07.000000000 +0000 @@ -9,7 +9,7 @@ cglib cglib-parent - 3.2.4 + 3.2.5 diff -Nru cglib-3.2.4/debian/changelog cglib-3.2.5/debian/changelog --- cglib-3.2.4/debian/changelog 2016-07-14 21:47:16.000000000 +0000 +++ cglib-3.2.5/debian/changelog 2017-06-19 14:12:40.000000000 +0000 @@ -1,3 +1,10 @@ +cglib (3.2.5-1) unstable; urgency=medium + + * Team upload. + * New upstream release + + -- Emmanuel Bourg Mon, 19 Jun 2017 16:12:40 +0200 + cglib (3.2.4-1) unstable; urgency=medium * Team upload. diff -Nru cglib-3.2.4/debian/patches/04-optional-ant-dependency.patch cglib-3.2.5/debian/patches/04-optional-ant-dependency.patch --- cglib-3.2.4/debian/patches/04-optional-ant-dependency.patch 2016-07-14 21:45:14.000000000 +0000 +++ cglib-3.2.5/debian/patches/04-optional-ant-dependency.patch 2017-06-19 14:12:15.000000000 +0000 @@ -14,7 +14,7 @@ --- a/pom.xml +++ b/pom.xml -@@ -214,7 +214,6 @@ +@@ -227,7 +227,6 @@ org.apache.ant ant 1.9.6 diff -Nru cglib-3.2.4/pom.xml cglib-3.2.5/pom.xml --- cglib-3.2.4/pom.xml 2016-06-24 15:28:08.000000000 +0000 +++ cglib-3.2.5/pom.xml 2017-03-06 19:24:07.000000000 +0000 @@ -14,7 +14,7 @@ cglib cglib-parent - 3.2.4 + 3.2.5 pom Code Generation Library @@ -54,7 +54,7 @@ 1.5 1.5 - 5.1 + 5.2 ${java.compiler.argument}