From 01dd7e1183175c40f4232707622eab9e11ec850e Mon Sep 17 00:00:00 2001 From: Liulei Date: Mon, 17 Feb 2025 18:05:34 +0800 Subject: [PATCH] fix(tvm): clone tload value --- actuator/src/main/java/org/tron/core/vm/OperationActions.java | 2 +- .../test/java/org/tron/common/runtime/vm/OperationsTest.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/actuator/src/main/java/org/tron/core/vm/OperationActions.java b/actuator/src/main/java/org/tron/core/vm/OperationActions.java index 1208a94b61b..95370ff16bb 100644 --- a/actuator/src/main/java/org/tron/core/vm/OperationActions.java +++ b/actuator/src/main/java/org/tron/core/vm/OperationActions.java @@ -649,7 +649,7 @@ public static void tLoadAction(Program program) { byte[] data = program.getContractState().getTransientStorageValue(address.getData(), key.getData()); - DataWord value = data != null ? new DataWord(data) : DataWord.ZERO(); + DataWord value = data != null ? new DataWord(data).clone() : DataWord.ZERO(); program.stackPush(value); program.step(); diff --git a/framework/src/test/java/org/tron/common/runtime/vm/OperationsTest.java b/framework/src/test/java/org/tron/common/runtime/vm/OperationsTest.java index 0eb00244d21..01d54c2194a 100644 --- a/framework/src/test/java/org/tron/common/runtime/vm/OperationsTest.java +++ b/framework/src/test/java/org/tron/common/runtime/vm/OperationsTest.java @@ -960,6 +960,10 @@ public void testTransientStorageOperations() throws ContractValidateException { program.getContractState().getTransientStorageValue( program.getContractAddress().getData(), new DataWord(0x01).getData())); + op = new byte[] {0x60, 0x02, 0x60, 0x01, 0x5c, 0x16}; + program = new Program(op, op, invoke, interTrx); + testOperations(program); + // TLOAD = 0x5c; op = new byte[] {0x60, 0x01, 0x5c}; program = new Program(op, op, invoke, interTrx);