@@ -2199,18 +2199,23 @@ public void run() {
2199
2199
/** Read a field.
2200
2200
*/
2201
2201
VarSymbol readField () {
2202
- long flags = adjustFieldFlags (nextChar ());
2202
+ char rawFlags = nextChar ();
2203
+ long flags = adjustFieldFlags (rawFlags );
2203
2204
Name name = poolReader .getName (nextChar ());
2204
2205
Type type = poolReader .getType (nextChar ());
2205
2206
VarSymbol v = new VarSymbol (flags , name , type , currentOwner );
2206
2207
readMemberAttrs (v );
2208
+ if (Integer .bitCount (rawFlags & (PUBLIC | PRIVATE | PROTECTED )) > 1 ||
2209
+ Integer .bitCount (rawFlags & (FINAL | VOLATILE )) > 1 )
2210
+ throw badClassFile ("illegal.flag.combo" , Flags .toString ((long )rawFlags ), "field" , v );
2207
2211
return v ;
2208
2212
}
2209
2213
2210
2214
/** Read a method.
2211
2215
*/
2212
2216
MethodSymbol readMethod () {
2213
- long flags = adjustMethodFlags (nextChar ());
2217
+ char rawFlags = nextChar ();
2218
+ long flags = adjustMethodFlags (rawFlags );
2214
2219
Name name = poolReader .getName (nextChar ());
2215
2220
Type type = poolReader .getType (nextChar ());
2216
2221
if (currentOwner .isInterface () &&
@@ -2259,6 +2264,8 @@ MethodSymbol readMethod() {
2259
2264
validateMethodType (name , m .type );
2260
2265
setParameters (m , type );
2261
2266
2267
+ if (Integer .bitCount (rawFlags & (PUBLIC | PRIVATE | PROTECTED )) > 1 )
2268
+ throw badClassFile ("illegal.flag.combo" , Flags .toString ((long )rawFlags ), "method" , m );
2262
2269
if ((flags & VARARGS ) != 0 ) {
2263
2270
final Type last = type .getParameterTypes ().last ();
2264
2271
if (last == null || !last .hasTag (ARRAY )) {
0 commit comments