Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2019-08-14 20:19:19 +0000
committerStephan Herrmann2019-08-15 08:55:12 +0000
commitd6be9a90acbfe69f7541bc1a20c414969c3b243b (patch)
treec4cedb2ce447cb94e76d557ae036f58c91bd3561
parentbfcc7f5fdc65e15bba873c742cf55b3775854f71 (diff)
downloadeclipse.jdt.core-d6be9a90acbfe69f7541bc1a20c414969c3b243b.tar.gz
eclipse.jdt.core-d6be9a90acbfe69f7541bc1a20c414969c3b243b.tar.xz
eclipse.jdt.core-d6be9a90acbfe69f7541bc1a20c414969c3b243b.zip
Bug 550063 - ClassFile.addFieldInfos throws
ArrayIndexOutOfBoundsException Change-Id: I35924c94a6379f87e2bf74a612555b18c3fa4795
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/XLargeTest2.java247
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java6
2 files changed, 253 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/XLargeTest2.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/XLargeTest2.java
index 6c16e49c34..5fde7f4749 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/XLargeTest2.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/XLargeTest2.java
@@ -18,6 +18,9 @@ import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import junit.framework.Test;
public class XLargeTest2 extends AbstractRegressionTest {
+ static {
+// TESTS_NAMES = new String[] { "testBug550063" };
+ }
public XLargeTest2(String name) {
super(name);
@@ -156,5 +159,249 @@ public class XLargeTest2 extends AbstractRegressionTest {
return 4300;
}
+ public void testBug550063() {
+ runConformTest(
+ new String[] {
+ "p001/bip.java",
+ "package p001;\n" +
+ "\n" +
+ getManyInterfaceDeclarations() +
+ "\n" +
+ "class bip implements brj, brk, cem, cen, cey, cez, cfk, cfl, cgu, cgx, che, chh, chq, chr, cji, cjj, ckk, ckl, clb, clc, clf, cli, cnk,\n" +
+ " cnl, cok, cqa, cqd, cqw, cqx, crs, crv, csu, csv, ctq, ctt, cvg, cvj, cvo, cvp, cwk, cwn, cwu, cww, cxh, cxk, daz, dba, dbr, dbu, dck,\n" +
+ " dcl, deh, dei, dep, deq, dff, dfg, dfl, dfo, dsp, dss, dtp, dtq, dtt, dtw, duj, duk, dvm, dvp, dvs, dvv, dwe, dwh, dxd, dxg, dyq, dys,\n" +
+ " dyv, dyw, dzh, dzk, dzn, dzo, dzx, eaa, ecw, ecx, edr, eds, efc, efd, eiw, eiz, ejy, ekb, emi, eml, eor, eou, epe, eph, epk, epl, eqi,\n" +
+ " eqj, erv, erw, etd, etg, etm, eto, fbc, fbd, feu, fev, ffc, fff, fgf, fgh, fgo, fgp, fhm, fhn, fib, fki, fkj, fkw, fkx, fmh, fmk, fnk,\n" +
+ " fnl, fnz, foc, fof, foi, fvk, fvn, fvv, fvw, fwy, fxb, fyb, fye, fyl, fym, fyv, fyy, fzq, fzs, gad, gag, gaq, gas, gav, gax, gbc, gbd,\n" +
+ " gco, gcr, gdc, gdf, gdn, gdq, gei, gej, gih, gik, gku, gkx, gln, glo, gmi, gmj, gmu, gmv, gpx, gpy, gqb, gqe, gqp, gqs, grb, grc, grh,\n" +
+ " gri, grn, gro, grv, grw, gtr, gtu, gxc, gvt, gvw, gwz {\n" +
+ "}\n"
+ });
+ }
+ public void testBug550063_b() {
+ runNegativeTest(
+ new String[] {
+ "p001/bip.java",
+ "package p001;\n" +
+ "\n" +
+ getManyInterfaceDeclarations() +
+ "\n" +
+ "class bop implements missing,\n" +
+ " brj, brk, cem, cen, cey, cez, cfk, cfl, cgu, cgx, che, chh, chq, chr, cji, cjj, ckk, ckl, clb, clc, clf, cli, cnk,\n" +
+ " cnl, cok, cqa, cqd, cqw, cqx, crs, crv, csu, csv, ctq, ctt, cvg, cvj, cvo, cvp, cwk, cwn, cwu, cww, cxh, cxk, daz, dba, dbr, dbu, dck,\n" +
+ " dcl, deh, dei, dep, deq, dff, dfg, dfl, dfo, dsp, dss, dtp, dtq, dtt, dtw, duj, duk, dvm, dvp, dvs, dvv, dwe, dwh, dxd, dxg, dyq, dys,\n" +
+ " dyv, dyw, dzh, dzk, dzn, dzo, dzx, eaa, ecw, ecx, edr, eds, efc, efd, eiw, eiz, ejy, ekb, emi, eml, eor, eou, epe, eph, epk, epl, eqi,\n" +
+ " eqj, erv, erw, etd, etg, etm, eto, fbc, fbd, feu, fev, ffc, fff, fgf, fgh, fgo, fgp, fhm, fhn, fib, fki, fkj, fkw, fkx, fmh, fmk, fnk,\n" +
+ " fnl, fnz, foc, fof, foi, fvk, fvn, fvv, fvw, fwy, fxb, fyb, fye, fyl, fym, fyv, fyy, fzq, fzs, gad, gag, gaq, gas, gav, gax, gbc, gbd,\n" +
+ " gco, gcr, gdc, gdf, gdn, gdq, gei, gej, gih, gik, gku, gkx, gln, glo, gmi, gmj, gmu, gmv, gpx, gpy, gqb, gqe, gqp, gqs, grb, grc, grh,\n" +
+ " gri, grn, gro, grv, grw, gtr, gtu, gxc, gvt, gvw, gwz {\n" +
+ "}\n"
+ },
+ "----------\n" +
+ "1. ERROR in p001\\bip.java (at line 200)\n" +
+ " class bop implements missing,\n" +
+ " ^^^^^^^\n" +
+ "missing cannot be resolved to a type\n" +
+ "----------\n");
+ }
+
+ private String getManyInterfaceDeclarations() {
+ return "interface brj {}\n" +
+ "interface brk {}\n" +
+ "interface cem {}\n" +
+ "interface cen {}\n" +
+ "interface cey {}\n" +
+ "interface cez {}\n" +
+ "interface cfk {}\n" +
+ "interface cfl {}\n" +
+ "interface cgu {}\n" +
+ "interface cgx {}\n" +
+ "interface che {}\n" +
+ "interface chh {}\n" +
+ "interface chq {}\n" +
+ "interface chr {}\n" +
+ "interface cji {}\n" +
+ "interface cjj {}\n" +
+ "interface ckk {}\n" +
+ "interface ckl {}\n" +
+ "interface clb {}\n" +
+ "interface clc {}\n" +
+ "interface clf {}\n" +
+ "interface cli {}\n" +
+ "interface cnk {}\n" +
+ "interface cnl {}\n" +
+ "interface cok {}\n" +
+ "interface cqa {}\n" +
+ "interface cqd {}\n" +
+ "interface cqw {}\n" +
+ "interface cqx {}\n" +
+ "interface crs {}\n" +
+ "interface crv {}\n" +
+ "interface csu {}\n" +
+ "interface csv {}\n" +
+ "interface ctq {}\n" +
+ "interface ctt {}\n" +
+ "interface cvg {}\n" +
+ "interface cvj {}\n" +
+ "interface cvo {}\n" +
+ "interface cvp {}\n" +
+ "interface cwk {}\n" +
+ "interface cwn {}\n" +
+ "interface cwu {}\n" +
+ "interface cww {}\n" +
+ "interface cxh {}\n" +
+ "interface cxk {}\n" +
+ "interface daz {}\n" +
+ "interface dba {}\n" +
+ "interface dbr {}\n" +
+ "interface dbu {}\n" +
+ "interface dck {}\n" +
+ "interface dcl {}\n" +
+ "interface deh {}\n" +
+ "interface dei {}\n" +
+ "interface dep {}\n" +
+ "interface deq {}\n" +
+ "interface dff {}\n" +
+ "interface dfg {}\n" +
+ "interface dfl {}\n" +
+ "interface dfo {}\n" +
+ "interface dsp {}\n" +
+ "interface dss {}\n" +
+ "interface dtp {}\n" +
+ "interface dtq {}\n" +
+ "interface dtt {}\n" +
+ "interface dtw {}\n" +
+ "interface duj {}\n" +
+ "interface duk {}\n" +
+ "interface dvm {}\n" +
+ "interface dvp {}\n" +
+ "interface dvs {}\n" +
+ "interface dvv {}\n" +
+ "interface dwe {}\n" +
+ "interface dwh {}\n" +
+ "interface dxd {}\n" +
+ "interface dxg {}\n" +
+ "interface dyq {}\n" +
+ "interface dys {}\n" +
+ "interface dyv {}\n" +
+ "interface dyw {}\n" +
+ "interface dzh {}\n" +
+ "interface dzk {}\n" +
+ "interface dzn {}\n" +
+ "interface dzo {}\n" +
+ "interface dzx {}\n" +
+ "interface eaa {}\n" +
+ "interface ecw {}\n" +
+ "interface ecx {}\n" +
+ "interface edr {}\n" +
+ "interface eds {}\n" +
+ "interface efc {}\n" +
+ "interface efd {}\n" +
+ "interface eiw {}\n" +
+ "interface eiz {}\n" +
+ "interface ejy {}\n" +
+ "interface ekb {}\n" +
+ "interface emi {}\n" +
+ "interface eml {}\n" +
+ "interface eor {}\n" +
+ "interface eou {}\n" +
+ "interface epe {}\n" +
+ "interface eph {}\n" +
+ "interface epk {}\n" +
+ "interface epl {}\n" +
+ "interface eqi {}\n" +
+ "interface eqj {}\n" +
+ "interface erv {}\n" +
+ "interface erw {}\n" +
+ "interface etd {}\n" +
+ "interface etg {}\n" +
+ "interface etm {}\n" +
+ "interface eto {}\n" +
+ "interface fbc {}\n" +
+ "interface fbd {}\n" +
+ "interface feu {}\n" +
+ "interface fev {}\n" +
+ "interface ffc {}\n" +
+ "interface fff {}\n" +
+ "interface fgf {}\n" +
+ "interface fgh {}\n" +
+ "interface fgo {}\n" +
+ "interface fgp {}\n" +
+ "interface fhm {}\n" +
+ "interface fhn {}\n" +
+ "interface fib {}\n" +
+ "interface fki {}\n" +
+ "interface fkj {}\n" +
+ "interface fkw {}\n" +
+ "interface fkx {}\n" +
+ "interface fmh {}\n" +
+ "interface fmk {}\n" +
+ "interface fnk {}\n" +
+ "interface fnl {}\n" +
+ "interface fnz {}\n" +
+ "interface foc {}\n" +
+ "interface fof {}\n" +
+ "interface foi {}\n" +
+ "interface fvk {}\n" +
+ "interface fvn {}\n" +
+ "interface fvv {}\n" +
+ "interface fvw {}\n" +
+ "interface fwy {}\n" +
+ "interface fxb {}\n" +
+ "interface fyb {}\n" +
+ "interface fye {}\n" +
+ "interface fyl {}\n" +
+ "interface fym {}\n" +
+ "interface fyv {}\n" +
+ "interface fyy {}\n" +
+ "interface fzq {}\n" +
+ "interface fzs {}\n" +
+ "interface gad {}\n" +
+ "interface gag {}\n" +
+ "interface gaq {}\n" +
+ "interface gas {}\n" +
+ "interface gav {}\n" +
+ "interface gax {}\n" +
+ "interface gbc {}\n" +
+ "interface gbd {}\n" +
+ "interface gco {}\n" +
+ "interface gcr {}\n" +
+ "interface gdc {}\n" +
+ "interface gdf {}\n" +
+ "interface gdn {}\n" +
+ "interface gdq {}\n" +
+ "interface gei {}\n" +
+ "interface gej {}\n" +
+ "interface gih {}\n" +
+ "interface gik {}\n" +
+ "interface gku {}\n" +
+ "interface gkx {}\n" +
+ "interface gln {}\n" +
+ "interface glo {}\n" +
+ "interface gmi {}\n" +
+ "interface gmj {}\n" +
+ "interface gmu {}\n" +
+ "interface gmv {}\n" +
+ "interface gpx {}\n" +
+ "interface gpy {}\n" +
+ "interface gqb {}\n" +
+ "interface gqe {}\n" +
+ "interface gqp {}\n" +
+ "interface gqs {}\n" +
+ "interface grb {}\n" +
+ "interface grc {}\n" +
+ "interface grh {}\n" +
+ "interface gri {}\n" +
+ "interface grn {}\n" +
+ "interface gro {}\n" +
+ "interface grv {}\n" +
+ "interface grw {}\n" +
+ "interface gtr {}\n" +
+ "interface gtu {}\n" +
+ "interface gvt {}\n" +
+ "interface gvw {}\n" +
+ "interface gwz {}\n" +
+ "interface gxc {}\n";
+ }
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
index 808ffc9236..35d46dd17b 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
@@ -218,6 +218,9 @@ public class ClassFile implements TypeConstants, TypeIds {
classFile.addFieldInfos();
} else {
// we have to set the number of fields to be equals to 0
+ if (classFile.contentsOffset + 2 >= classFile.contents.length) {
+ classFile.resizeContents(2);
+ }
classFile.contents[classFile.contentsOffset++] = 0;
classFile.contents[classFile.contentsOffset++] = 0;
}
@@ -666,6 +669,9 @@ public class ClassFile implements TypeConstants, TypeIds {
if (fieldCount > 0xFFFF) {
this.referenceBinding.scope.problemReporter().tooManyFields(this.referenceBinding.scope.referenceType());
}
+ if (this.contentsOffset + 2 >= this.contents.length) {
+ resizeContents(2);
+ }
this.contents[this.contentsOffset++] = (byte) (fieldCount >> 8);
this.contents[this.contentsOffset++] = (byte) fieldCount;

Back to the top