You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2006/11/03 14:00:10 UTC
svn commit: r470792 -
/incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_field.cpp
Author: gshimansky
Date: Fri Nov 3 05:00:08 2006
New Revision: 470792
URL: http://svn.apache.org/viewvc?view=rev&rev=470792
Log:
Applied HARMONY-1987 [DRLVM] [JVMTI] Insufficient check of fieldID in Field group of JVMTI functions.
Tests passed on win32 and ubuntu
Modified:
incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_field.cpp
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_field.cpp
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_field.cpp?view=diff&rev=470792&r1=470791&r2=470792
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_field.cpp (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_field.cpp Fri Nov 3 05:00:08 2006
@@ -60,8 +60,22 @@
if (! is_valid_class_object(klass))
return JVMTI_ERROR_INVALID_CLASS;
+ Class *cl = jclass_to_struct_Class(klass);
+ if( cl == NULL ) return JVMTI_ERROR_NULL_POINTER;
+
if( !field ) return JVMTI_ERROR_INVALID_FIELDID; // (25)
+ bool present = false;
+ for( unsigned i = 0; i < cl->n_fields; i++ ) {
+ if( (jfieldID)&(cl->fields[i]) == field ) {
+ present = true;
+ break;
+ }
+ }
+
+ if( !present )
+ return JVMTI_ERROR_INVALID_FIELDID;
+
char* fld_name;
char* fld_sig;
Field* fld = reinterpret_cast<Field*>(field);
@@ -125,8 +139,23 @@
if (! is_valid_class_object(klass))
return JVMTI_ERROR_INVALID_CLASS;
+
+ Class *cl = jclass_to_struct_Class(klass);
+ if( cl == NULL ) return JVMTI_ERROR_NULL_POINTER;
if( !field ) return JVMTI_ERROR_INVALID_FIELDID;
+
+ bool present = false;
+ for( unsigned i = 0; i < cl->n_fields; i++ ) {
+ if( (jfieldID)&(cl->fields[i]) == field ) {
+ present = true;
+ break;
+ }
+ }
+
+ if( !present )
+ return JVMTI_ERROR_INVALID_FIELDID;
+
if( !declaring_class_ptr ) return JVMTI_ERROR_NULL_POINTER;
Class* cls = reinterpret_cast<Field*>(field)->get_class();
@@ -164,8 +193,23 @@
if (! is_valid_class_object(klass))
return JVMTI_ERROR_INVALID_CLASS;
+
+ Class *cl = jclass_to_struct_Class(klass);
+ if( cl == NULL ) return JVMTI_ERROR_NULL_POINTER;
if( !field ) return JVMTI_ERROR_INVALID_FIELDID;
+
+ bool present = false;
+ for( unsigned i = 0; i < cl->n_fields; i++ ) {
+ if( (jfieldID)&(cl->fields[i]) == field ) {
+ present = true;
+ break;
+ }
+ }
+
+ if( !present )
+ return JVMTI_ERROR_INVALID_FIELDID;
+
if( !modifiers_ptr ) return JVMTI_ERROR_NULL_POINTER;
*modifiers_ptr = 0;