--- old/src/hotspot/share/runtime/javaCalls.hpp 2018-09-28 11:53:55.000000000 -0700 +++ new/src/hotspot/share/runtime/javaCalls.hpp 2018-09-28 11:53:55.000000000 -0700 @@ -163,34 +163,44 @@ value_state_limit }; + void size_check(int words = 1) { + assert(_size + (words-1) < _max_size, "oob: increase max_size argument to JavaCallArguments"); + } + inline void push_oop(Handle h) { + size_check(); _value_state[_size] = value_state_handle; _size = push_oop_impl(h.raw_value(), _size); } inline void push_jobject(jobject h) { + size_check(); _value_state[_size] = value_state_jobject; _size = push_oop_impl(h, _size); } inline void push_int(int i) { + size_check(); _value_state[_size] = value_state_primitive; JNITypes::put_int(i, _value, _size); } inline void push_double(double d) { + size_check(2); _value_state[_size] = value_state_primitive; _value_state[_size + 1] = value_state_primitive; JNITypes::put_double(d, _value, _size); } inline void push_long(jlong l) { + size_check(2); _value_state[_size] = value_state_primitive; _value_state[_size + 1] = value_state_primitive; JNITypes::put_long(l, _value, _size); } inline void push_float(float f) { + size_check(); _value_state[_size] = value_state_primitive; JNITypes::put_float(f, _value, _size); } @@ -210,6 +220,7 @@ _value_state--; _value--; _size++; + DEBUG_ONLY(_max_size++); _value_state[0] = value_state_handle; push_oop_impl(h.raw_value(), 0); }