From 2c14a1246448afe8c03265068fef37975d41604b Mon Sep 17 00:00:00 2001 From: catbref Date: Thu, 25 Jun 2020 14:22:28 +0100 Subject: [PATCH] Check for unknown Qortal-only AT function codes & add safety to AT running in general --- src/main/java/org/qortal/at/AT.java | 6 +++++- src/main/java/org/qortal/at/QortalATAPI.java | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/qortal/at/AT.java b/src/main/java/org/qortal/at/AT.java index cc72184e..368e3a97 100644 --- a/src/main/java/org/qortal/at/AT.java +++ b/src/main/java/org/qortal/at/AT.java @@ -100,7 +100,11 @@ public class AT { // [Re]create AT machine state using AT state data or from scratch as applicable MachineState state = MachineState.fromBytes(api, loggerFactory, latestAtStateData.getStateData(), codeBytes); - state.execute(); + try { + state.execute(); + } catch (Exception e) { + throw new DataException(String.format("Uncaught exception while running AT '%s'", atAddress), e); + } long creation = this.atData.getCreation(); byte[] stateData = state.toBytes(); diff --git a/src/main/java/org/qortal/at/QortalATAPI.java b/src/main/java/org/qortal/at/QortalATAPI.java index 4d7c45c2..bf7d2abc 100644 --- a/src/main/java/org/qortal/at/QortalATAPI.java +++ b/src/main/java/org/qortal/at/QortalATAPI.java @@ -449,6 +449,9 @@ public class QortalATAPI extends API { public void platformSpecificPostCheckExecute(FunctionData functionData, MachineState state, short rawFunctionCode) throws ExecutionException { QortalFunctionCode qortalFunctionCode = QortalFunctionCode.valueOf(rawFunctionCode); + if (qortalFunctionCode == null) + throw new IllegalFunctionCodeException("Unknown Qortal function code 0x" + String.format("%04x", rawFunctionCode) + " encountered"); + qortalFunctionCode.execute(functionData, state, rawFunctionCode); }