Skip to content

Commit 7e374ec

Browse files
Merge pull request #6214 from raymondliu0711/fix/tstore_revert
fix(tvm): revert tstore in staticcall
2 parents 9a70395 + f187e10 commit 7e374ec

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

actuator/src/main/java/org/tron/core/vm/OperationActions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,9 @@ public static void tLoadAction(Program program) {
656656
}
657657

658658
public static void tStoreAction(Program program) {
659+
if (program.isStaticCall()) {
660+
throw new Program.StaticCallModificationException();
661+
}
659662
DataWord key = program.stackPop();
660663
DataWord value = program.stackPop();
661664
DataWord address = program.getContractAddress();

actuator/src/main/java/org/tron/core/vm/program/invoke/ProgramInvokeMockImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,10 @@ public void setOwnerAddress(byte[] ownerAddress) {
210210
this.ownerAddress = Arrays.clone(ownerAddress);
211211
}
212212

213+
public void setStaticCall(boolean isStatic) {
214+
isStaticCall = isStatic;
215+
}
216+
213217
@Override
214218
public boolean isStaticCall() {
215219
return isStaticCall;

framework/src/test/java/org/tron/common/runtime/vm/OperationsTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,6 +953,15 @@ public void testTransientStorageOperations() throws ContractValidateException {
953953

954954
// TSTORE = 0x5d;
955955
op = new byte[] {0x60, 0x01, 0x60, 0x01, 0x5d};
956+
957+
invoke.setStaticCall(true);
958+
program = new Program(op, op, invoke, interTrx);
959+
testOperations(program);
960+
Assert.assertEquals(20000, program.getResult().getEnergyUsed());
961+
Assert.assertTrue(program.getResult().getException()
962+
instanceof Program.StaticCallModificationException);
963+
964+
invoke.setStaticCall(false);
956965
program = new Program(op, op, invoke, interTrx);
957966
testOperations(program);
958967
Assert.assertEquals(106, program.getResult().getEnergyUsed());

0 commit comments

Comments
 (0)