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);