From: chibash Date: Sat, 6 Aug 2022 18:01:40 +0000 (+0900) Subject: prohibits too many items from being added to a constant pool X-Git-Tag: rel_3_29_1_ga~2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=4f35e4e1a8c76fa7da07a92674ffddd5c4c27ec0;p=javassist.git prohibits too many items from being added to a constant pool --- diff --git a/javassist.jar b/javassist.jar index bcdd5600..fcead50d 100644 Binary files a/javassist.jar and b/javassist.jar differ diff --git a/src/main/javassist/bytecode/ConstPool.java b/src/main/javassist/bytecode/ConstPool.java index 1ce26b3e..b5113e42 100644 --- a/src/main/javassist/bytecode/ConstPool.java +++ b/src/main/javassist/bytecode/ConstPool.java @@ -1433,6 +1433,9 @@ public final class ConstPool */ public void write(DataOutputStream out) throws IOException { + if (numOfItems < 0 || Short.MAX_VALUE < numOfItems) + throw new IOException("too many constant pool items " + numOfItems); + out.writeShort(numOfItems); LongVector v = items; int size = numOfItems; diff --git a/src/test/javassist/JvstTest5.java b/src/test/javassist/JvstTest5.java index ade41e8c..39af16b9 100644 --- a/src/test/javassist/JvstTest5.java +++ b/src/test/javassist/JvstTest5.java @@ -15,6 +15,7 @@ import javassist.expr.ExprEditor; import javassist.expr.Handler; import javassist.expr.MethodCall; import javassist.expr.NewExpr; +import junit.framework.Assert; @SuppressWarnings({"rawtypes","unchecked","unused"}) public class JvstTest5 extends JvstTestRoot { @@ -574,4 +575,17 @@ public class JvstTest5 extends JvstTestRoot { Object obj = make(cc.getName()); assertEquals(1, invoke(obj, "run")); } + + public void testTooManyConstPoolItems() throws Exception { + CtClass cc = sloader.makeClass("TooManyConstPoolItems"); + ClassFile cf = cc.getClassFile(); + ConstPool cPool = cf.getConstPool(); + for (int i = 0; i <= 65527; i++) + cPool.addIntegerInfo(i); + try { + cc.writeFile(); + fail("too many items were accepted"); + } + catch (CannotCompileException e) {} + } }