aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/jcf-io.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/java/jcf-io.c')
-rw-r--r--gcc/java/jcf-io.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/java/jcf-io.c b/gcc/java/jcf-io.c
index 0dc7615..c50ec49 100644
--- a/gcc/java/jcf-io.c
+++ b/gcc/java/jcf-io.c
@@ -518,6 +518,26 @@ verify_constant_pool (JCF *jcf)
case CONSTANT_Utf8:
case CONSTANT_Unicode:
break;
+ case CONSTANT_MethodHandle:
+ n = JPOOL_USHORT1 (jcf, i);
+ if (n < 1 || n > 9)
+ return i;
+ n = JPOOL_USHORT2 (jcf, i);
+ if (n <= 0 || n >= JPOOL_SIZE(jcf))
+ return i;
+ break;
+ case CONSTANT_MethodType:
+ n = JPOOL_USHORT1 (jcf, i);
+ if (n <= 0 || n >= JPOOL_SIZE(jcf)
+ || JPOOL_TAG (jcf, n) != CONSTANT_Utf8)
+ return i;
+ break;
+ case CONSTANT_InvokeDynamic:
+ n = JPOOL_USHORT2 (jcf, i);
+ if (n <= 0 || n >= JPOOL_SIZE(jcf)
+ || JPOOL_TAG (jcf, n) != CONSTANT_NameAndType)
+ return i;
+ break;
default:
return i;
}