diff options
author | chibash <chiba@javassist.org> | 2022-08-07 03:01:40 +0900 |
---|---|---|
committer | chibash <chiba@javassist.org> | 2022-08-07 03:01:40 +0900 |
commit | 4f35e4e1a8c76fa7da07a92674ffddd5c4c27ec0 (patch) | |
tree | e80a7204fbc4e4e428dd69887248e564b560b159 /src | |
parent | 7bbf0d4244011baa0dfb6f5116b659cab514cc9a (diff) | |
download | javassist-4f35e4e1a8c76fa7da07a92674ffddd5c4c27ec0.tar.gz javassist-4f35e4e1a8c76fa7da07a92674ffddd5c4c27ec0.zip |
prohibits too many items from being added to a constant pool
Diffstat (limited to 'src')
-rw-r--r-- | src/main/javassist/bytecode/ConstPool.java | 3 | ||||
-rw-r--r-- | src/test/javassist/JvstTest5.java | 14 |
2 files changed, 17 insertions, 0 deletions
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) {} + } } |