You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2014/09/12 01:49:27 UTC
svn commit: r1624422 - in
/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile: ClassParser.java
Utility.java
Author: kkolinko
Date: Thu Sep 11 23:49:27 2014
New Revision: 1624422
URL: http://svn.apache.org/r1624422
Log:
Add helper method Utility.skipFully() (named after DataInput.readFully())
and use it to skip bytes rather than read and ignore.
Modified:
tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java
tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java
Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java?rev=1624422&r1=1624421&r2=1624422&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java Thu Sep 11 23:49:27 2014
@@ -229,7 +229,8 @@ public final class ClassParser {
* @throws ClassFormatException
*/
private void readVersion() throws IOException, ClassFormatException {
- file.readUnsignedShort(); // Unused minor
- file.readUnsignedShort(); // Unused major
+ // file.readUnsignedShort(); // Unused minor
+ // file.readUnsignedShort(); // Unused major
+ Utility.skipFully(file, 4);
}
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java?rev=1624422&r1=1624421&r2=1624422&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java Thu Sep 11 23:49:27 2014
@@ -19,6 +19,7 @@ package org.apache.tomcat.util.bcel.clas
import java.io.DataInput;
import java.io.DataInputStream;
+import java.io.EOFException;
import java.io.IOException;
import org.apache.tomcat.util.bcel.Constants;
@@ -47,33 +48,36 @@ final class Utility {
return str.replace('/', '.'); // Is `/' on all systems, even DOS
}
- static void swallowCodeException(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused start_pc
- file.readUnsignedShort(); // Unused end_pc
- file.readUnsignedShort(); // Unused handler_pc
- file.readUnsignedShort(); // Unused catch_type
- }
-
- static void swallowInnerClass(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused inner_class_index
- file.readUnsignedShort(); // Unused outer_class_index
- file.readUnsignedShort(); // Unused inner_name_index
- file.readUnsignedShort(); // Unused inner_access_flags
- }
-
- static void swallowLineNumber(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused start_pc
- file.readUnsignedShort(); // Unused line_number
- }
-
- static void swallowLocalVariable(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused start_pc
- file.readUnsignedShort(); // Unused length
- file.readUnsignedShort(); // Unused name_index
- file.readUnsignedShort(); // Unused signature_index
- file.readUnsignedShort(); // Unused index
+ static void skipFully(DataInput file, int length) throws IOException {
+ int total = file.skipBytes(length);
+ if (total != length) {
+ throw new EOFException();
+ }
}
+ // file.readUnsignedShort(); // Unused start_pc
+ // file.readUnsignedShort(); // Unused end_pc
+ // file.readUnsignedShort(); // Unused handler_pc
+ // file.readUnsignedShort(); // Unused catch_type
+ private static final int swallowCodeException_size = 8;
+
+ // file.readUnsignedShort(); // Unused inner_class_index
+ // file.readUnsignedShort(); // Unused outer_class_index
+ // file.readUnsignedShort(); // Unused inner_name_index
+ // file.readUnsignedShort(); // Unused inner_access_flags
+ private static final int swallowInnerClass_size = 8;
+
+ // file.readUnsignedShort(); // Unused start_pc
+ // file.readUnsignedShort(); // Unused line_number
+ private static final int swallowLineNumber_size = 4;
+
+ // file.readUnsignedShort(); // Unused start_pc
+ // file.readUnsignedShort(); // Unused length
+ // file.readUnsignedShort(); // Unused name_index
+ // file.readUnsignedShort(); // Unused signature_index
+ // file.readUnsignedShort(); // Unused index
+ private static final int swallowLocalVariable_size = 10;
+
static void swallowStackMap(DataInput file) throws IOException {
int map_length = file.readUnsignedShort();
for (int i = 0; i < map_length; i++) {
@@ -95,12 +99,14 @@ final class Utility {
}
// Check to see if type has an index
if ((type == Constants.ITEM_Object) || (type == Constants.ITEM_NewObject)) {
- file.readShort(); // Unused index
+ // file.readShort(); // Unused index
+ skipFully(file, 2);
}
}
static void swallowStackMapEntry(DataInput file) throws IOException {
- file.readShort(); // Unused byte_code_offset
+ // file.readShort(); // Unused byte_code_offset
+ skipFully(file, 2);
int number_of_locals = file.readShort();
for (int i = 0; i < number_of_locals; i++) {
swallowStackMapType(file);
@@ -120,22 +126,27 @@ final class Utility {
frame_type <= Constants.SAME_LOCALS_1_STACK_ITEM_FRAME_MAX) {
swallowStackMapType(file); // Unused single stack item
} else if (frame_type == Constants.SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED) {
- file.readShort(); // Unused byte_code_offset_delta
+ // file.readShort(); // Unused byte_code_offset_delta
+ skipFully(file, 2);
swallowStackMapType(file); // Unused single stack item
} else if (frame_type >= Constants.CHOP_FRAME &&
frame_type <= Constants.CHOP_FRAME_MAX) {
- file.readShort(); // Unused byte_code_offset_delta
+ // file.readShort(); // Unused byte_code_offset_delta
+ skipFully(file, 2);
} else if (frame_type == Constants.SAME_FRAME_EXTENDED) {
- file.readShort(); // Unused byte_code_offset_delta
+ // file.readShort(); // Unused byte_code_offset_delta
+ skipFully(file, 2);
} else if (frame_type >= Constants.APPEND_FRAME &&
frame_type <= Constants.APPEND_FRAME_MAX) {
- file.readShort(); // Unused byte_code_offset_delta
+ // file.readShort(); // Unused byte_code_offset_delta
+ skipFully(file, 2);
int number_of_locals = frame_type - 251;
for (int i = 0; i < number_of_locals; i++) {
swallowStackMapType(file);
}
} else if (frame_type == Constants.FULL_FRAME) {
- file.readShort(); // Unused byte_code_offset_delta
+ // file.readShort(); // Unused byte_code_offset_delta
+ skipFully(file, 2);
int number_of_locals = file.readShort();
for (int i = 0; i < number_of_locals; i++) {
swallowStackMapType(file);
@@ -153,13 +164,13 @@ final class Utility {
static void swallowUnknownAttribute(DataInput file, int length) throws IOException {
if (length > 0) {
- byte[] bytes = new byte[length];
- file.readFully(bytes);
+ skipFully(file, length);
}
}
static void swallowSignature(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused signature_index
+ // file.readUnsignedShort(); // Unused signature_index
+ skipFully(file, 2);
}
static void swallowSynthetic(int length) {
@@ -171,43 +182,46 @@ final class Utility {
static void swallowBootstrapMethods(DataInput file) throws IOException {
int num_bootstrap_methods = file.readUnsignedShort();
for (int i = 0; i < num_bootstrap_methods; i++) {
- file.readUnsignedShort(); // Unused bootstrap_method_ref
+ // file.readUnsignedShort(); // Unused bootstrap_method_ref
+ skipFully(file, 2);
int num_bootstrap_args = file.readUnsignedShort();
- for (int j = 0; j < num_bootstrap_args; j++) {
- file.readUnsignedShort(); // Unused bootstrap method argument
- }
+ // for (int j = 0; j < num_bootstrap_args; j++) {
+ // file.readUnsignedShort(); // Unused bootstrap method argument
+ // }
+ skipFully(file, 2 * num_bootstrap_args);
}
}
static void swallowMethodParameters(DataInput file) throws IOException {
int parameters_count = file.readUnsignedByte();
- for (int i = 0; i < parameters_count; i++) {
- file.readUnsignedShort(); // Unused name_index
- file.readUnsignedShort(); // Unused access_flags
- }
+ // for (int i = 0; i < parameters_count; i++) {
+ // file.readUnsignedShort(); // Unused name_index
+ // file.readUnsignedShort(); // Unused access_flags
+ // }
+ skipFully(file, 4 * parameters_count);
}
static void swallowSourceFile(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused sourcefile_index
+ // file.readUnsignedShort(); // Unused sourcefile_index
+ skipFully(file, 2);
}
static void swallowConstantValue(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused constantvalue_index
+ // file.readUnsignedShort(); // Unused constantvalue_index
+ skipFully(file, 2);
}
static void swallowCode(DataInputStream file, ConstantPool constant_pool) throws IOException {
- file.readUnsignedShort(); // Unused max_stack
- file.readUnsignedShort(); // Unused max_locals
+ // file.readUnsignedShort(); // Unused max_stack
+ // file.readUnsignedShort(); // Unused max_locals
+ skipFully(file, 4);
int code_length = file.readInt();
- byte[] code = new byte[code_length]; // Read byte code
- file.readFully(code);
+ skipFully(file, code_length); // Read byte code
/* Read exception table that contains all regions where an exception
* handler is active, i.e., a try { ... } catch() block.
*/
int exception_table_length = file.readUnsignedShort();
- for (int i = 0; i < exception_table_length; i++) {
- swallowCodeException(file);
- }
+ skipFully(file, swallowCodeException_size * exception_table_length);
/* Read all attributes, currently `LineNumberTable' and
* `LocalVariableTable'
*/
@@ -219,37 +233,30 @@ final class Utility {
static void swallowExceptionTable(DataInput file) throws IOException {
int number_of_exceptions = file.readUnsignedShort();
- for (int i = 0; i < number_of_exceptions; i++) {
- file.readUnsignedShort(); // Unused exception index
- }
+ // for (int i = 0; i < number_of_exceptions; i++) {
+ // file.readUnsignedShort(); // Unused exception index
+ // }
+ skipFully(file, 2 * number_of_exceptions);
}
static void swallowLineNumberTable(DataInput file) throws IOException {
int line_number_table_length = (file.readUnsignedShort());
- for (int i = 0; i < line_number_table_length; i++) {
- swallowLineNumber(file);
- }
+ skipFully(file, swallowLineNumber_size * line_number_table_length);
}
static void swallowLocalVariableTable(DataInput file) throws IOException {
int local_variable_table_length = (file.readUnsignedShort());
- for (int i = 0; i < local_variable_table_length; i++) {
- swallowLocalVariable(file);
- }
+ skipFully(file, swallowLocalVariable_size * local_variable_table_length);
}
static void swallowLocalVariableTypeTable(DataInput file) throws IOException {
int local_variable_type_table_length = (file.readUnsignedShort());
- for(int i=0; i < local_variable_type_table_length; i++) {
- swallowLocalVariable(file);
- }
+ skipFully(file, swallowLocalVariable_size * local_variable_type_table_length);
}
static void swallowInnerClasses(DataInput file) throws IOException {
int number_of_classes = file.readUnsignedShort();
- for (int i = 0; i < number_of_classes; i++) {
- swallowInnerClass(file);
- }
+ skipFully(file, swallowInnerClass_size * number_of_classes);
}
static void swallowDeprecated(int length) {
@@ -259,41 +266,49 @@ final class Utility {
}
static void swallowPMCClass(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused pmg_index
- file.readUnsignedShort(); // Unused pmg_class_index
+ // file.readUnsignedShort(); // Unused pmg_index
+ // file.readUnsignedShort(); // Unused pmg_class_index
+ skipFully(file, 4);
}
static void swallowEnclosingMethod(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused class index
- file.readUnsignedShort(); // Unused method index
+ // file.readUnsignedShort(); // Unused class index
+ // file.readUnsignedShort(); // Unused method index
+ skipFully(file, 4);
}
static void swallowConstantCP(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused class index
- file.readUnsignedShort(); // Unused name and type index
+ // file.readUnsignedShort(); // Unused class index
+ // file.readUnsignedShort(); // Unused name and type index
+ skipFully(file, 4);
}
static void swallowConstantMethodHandle(DataInput file) throws IOException {
- file.readUnsignedByte(); // Unused reference_kind
- file.readUnsignedShort(); // Unused reference_index
+ // file.readUnsignedByte(); // Unused reference_kind
+ // file.readUnsignedShort(); // Unused reference_index
+ skipFully(file, 3);
}
static void swallowConstantString(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused string index
+ // file.readUnsignedShort(); // Unused string index
+ skipFully(file, 2);
}
static void swallowConstantNameAndType(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused name index
- file.readUnsignedShort(); // Unused signature index
+ // file.readUnsignedShort(); // Unused name index
+ // file.readUnsignedShort(); // Unused signature index
+ skipFully(file, 4);
}
static void swallowConstantMethodType(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused descriptor_index
+ // file.readUnsignedShort(); // Unused descriptor_index
+ skipFully(file, 2);
}
static void swallowConstantInvokeDynamic(DataInput file) throws IOException {
- file.readUnsignedShort(); // Unused bootstrap_method_attr_index
- file.readUnsignedShort(); // Unused name_and_type_index
+ // file.readUnsignedShort(); // Unused bootstrap_method_attr_index
+ // file.readUnsignedShort(); // Unused name_and_type_index
+ skipFully(file, 4);
}
static void swallowAnnotations(DataInput file) throws IOException {
@@ -305,10 +320,12 @@ final class Utility {
static void swallowAnnotationEntry(DataInput file)
throws IOException {
- file.readUnsignedShort(); // Unused type index
+ // file.readUnsignedShort(); // Unused type index
+ skipFully(file, 2);
final int num_element_value_pairs = file.readUnsignedShort();
for (int i = 0; i < num_element_value_pairs; i++) {
- file.readUnsignedShort(); // Unused name index
+ // file.readUnsignedShort(); // Unused name index
+ skipFully(file, 2);
swallowElementValue(file);
}
}
@@ -342,19 +359,20 @@ final class Utility {
case 'Z': // boolean
case 's': // String
case 'c': // Class
- file.readUnsignedShort(); // Unused value index
+ // file.readUnsignedShort(); // Unused value index
+ skipFully(file, 2);
break;
case 'e': // Enum constant
- file.readUnsignedShort(); // Unused type_index
- file.readUnsignedShort(); // Unused value index
+ // file.readUnsignedShort(); // Unused type_index
+ // file.readUnsignedShort(); // Unused value index
+ skipFully(file, 4);
break;
case '@': // Annotation
swallowAnnotationEntry(file);
break;
case '[': // Array
int numArrayVals = file.readUnsignedShort();
- for (int j = 0; j < numArrayVals; j++)
- {
+ for (int j = 0; j < numArrayVals; j++) {
swallowElementValue(file);
}
break;
@@ -366,9 +384,10 @@ final class Utility {
static void swallowFieldOrMethod(DataInputStream file, ConstantPool constant_pool)
throws IOException {
- file.readUnsignedShort(); // Unused access flags
- file.readUnsignedShort(); // name index
- file.readUnsignedShort(); // signature index
+ // file.readUnsignedShort(); // Unused access flags
+ // file.readUnsignedShort(); // name index
+ // file.readUnsignedShort(); // signature index
+ skipFully(file, 6);
int attributes_count = file.readUnsignedShort();
for (int i = 0; i < attributes_count; i++) {
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org