summaryrefslogtreecommitdiffstats
path: root/runtime/interpreter/interpreter_switch_impl.cc
diff options
context:
space:
mode:
authorSebastien Hertz <shertz@google.com>2014-05-21 10:07:42 +0200
committerSebastien Hertz <shertz@google.com>2014-05-21 10:08:31 +0200
commit5c0049067a953d7a2383d3064a84a32d1efa3a24 (patch)
treebe0377c1348c8aea84a7308fd5977657b8f3622d /runtime/interpreter/interpreter_switch_impl.cc
parentbf17a08fb48fa296acb09904d4c10ba42f63f55d (diff)
downloadart-5c0049067a953d7a2383d3064a84a32d1efa3a24.zip
art-5c0049067a953d7a2383d3064a84a32d1efa3a24.tar.gz
art-5c0049067a953d7a2383d3064a84a32d1efa3a24.tar.bz2
Secure move-exception in intepreter
Copies exception into the shadow frame before clearing it from its thread so it's always reachable. Change-Id: Ifdc68280424f5099aacf0724da94889881a99551
Diffstat (limited to 'runtime/interpreter/interpreter_switch_impl.cc')
-rw-r--r--runtime/interpreter/interpreter_switch_impl.cc4
1 files changed, 2 insertions, 2 deletions
diff --git a/runtime/interpreter/interpreter_switch_impl.cc b/runtime/interpreter/interpreter_switch_impl.cc
index c1d24f5..deb897a 100644
--- a/runtime/interpreter/interpreter_switch_impl.cc
+++ b/runtime/interpreter/interpreter_switch_impl.cc
@@ -163,9 +163,9 @@ JValue ExecuteSwitchImpl(Thread* self, MethodHelper& mh, const DexFile::CodeItem
break;
case Instruction::MOVE_EXCEPTION: {
PREAMBLE();
- Throwable* exception = self->GetException(NULL);
- self->ClearException();
+ Throwable* exception = self->GetException(nullptr);
shadow_frame.SetVRegReference(inst->VRegA_11x(inst_data), exception);
+ self->ClearException();
inst = inst->Next_1xx();
break;
}