From 77875c9133dfa90abc86de23e59f96daacc516b0 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 15 Aug 2025 13:58:38 -0400 Subject: [PATCH] fix: actually return int instead of bool (#5651) --- src/test/app/HostFuncImpl_test.cpp | 18 +++++++++--------- src/test/app/Wasm_test.cpp | 16 ++++++++++------ src/xrpld/app/wasm/HostFunc.h | 6 ++++++ src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 15 +++++---------- src/xrpld/app/wasm/detail/WasmVM.cpp | 2 +- 5 files changed, 31 insertions(+), 26 deletions(-) diff --git a/src/test/app/HostFuncImpl_test.cpp b/src/test/app/HostFuncImpl_test.cpp index bd8ef8a379..dea7ce4d51 100644 --- a/src/test/app/HostFuncImpl_test.cpp +++ b/src/test/app/HostFuncImpl_test.cpp @@ -1442,15 +1442,15 @@ struct HostFuncImpl_test : public beast::unit_test::suite BEAST_EXPECT(compareKeylet(actual.value(), expected)); \ } \ } -#define COMPARE_KEYLET_FAIL(hfsFunc, keyletFunc, expected, ...) \ - { \ - auto actual = hfs.hfsFunc(__VA_ARGS__); \ - if (BEAST_EXPECT(!actual.has_value())) \ - { \ - BEAST_EXPECTS( \ - actual.error() == expected, \ - std::to_string(static_cast(actual.error()))); \ - } \ +#define COMPARE_KEYLET_FAIL(hfsFunc, keyletFunc, expected, ...) \ + { \ + auto actual = hfs.hfsFunc(__VA_ARGS__); \ + if (BEAST_EXPECT(!actual.has_value())) \ + { \ + BEAST_EXPECTS( \ + actual.error() == expected, \ + std::to_string(HfErrorToInt(actual.error()))); \ + } \ } // accountKeylet diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index 4fb30242fb..42e3951869 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -376,9 +376,11 @@ struct Wasm_test : public beast::unit_test::suite BadTestHostFunctions nfs(env); auto re = runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs, 100000); - BEAST_EXPECT(re.has_value() && !re->result && (re->cost == 5831)); - // std::cout << "bad case (access nonexistent field) result " - // << re.error() << std::endl; + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECT(re->result == -201); + BEAST_EXPECT(re->cost == 5831); + } } { // fail because trying to allocate more than MAX_PAGES memory @@ -396,9 +398,11 @@ struct Wasm_test : public beast::unit_test::suite BadTestHostFunctions nfs(env); auto re = runEscrowWasm(wasm, ESCROW_FUNCTION_NAME, {}, &nfs, 100'000); - BEAST_EXPECT(re.has_value() && !re->result && (re->cost == 5831)); - // std::cout << "bad case (more than MAX_PAGES) result " - // << re.error() << std::endl; + if (BEAST_EXPECT(re.has_value())) + { + BEAST_EXPECT(re->result == -201); + BEAST_EXPECT(re->cost == 5831); + } } { // fail because recursion too deep diff --git a/src/xrpld/app/wasm/HostFunc.h b/src/xrpld/app/wasm/HostFunc.h index 865ce49fb3..d1552df5a5 100644 --- a/src/xrpld/app/wasm/HostFunc.h +++ b/src/xrpld/app/wasm/HostFunc.h @@ -54,6 +54,12 @@ enum class HostFunctionError : int32_t { FLOAT_COMPUTATION_ERROR = -20, }; +inline int32_t +HfErrorToInt(HostFunctionError e) +{ + return static_cast(e); +} + std::string floatToString(Slice const& data); diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 20b52e418f..75f072be2a 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -41,22 +41,18 @@ setData( return 0; // LCOV_EXCL_LINE if (dst < 0 || dstSize < 0 || !src || srcSize < 0) - return static_cast>( - HostFunctionError::INVALID_PARAMS); + return HfErrorToInt(HostFunctionError::INVALID_PARAMS); auto memory = runtime ? runtime->getMem() : wmem(); // LCOV_EXCL_START if (!memory.s) - return static_cast>( - HostFunctionError::NO_MEM_EXPORTED); + return HfErrorToInt(HostFunctionError::NO_MEM_EXPORTED); // LCOV_EXCL_STOP if (dst + dstSize > memory.s) - return static_cast>( - HostFunctionError::POINTER_OUT_OF_BOUNDS); + return HfErrorToInt(HostFunctionError::POINTER_OUT_OF_BOUNDS); if (srcSize > dstSize) - return static_cast>( - HostFunctionError::BUFFER_TOO_SMALL); + return HfErrorToInt(HostFunctionError::BUFFER_TOO_SMALL); memcpy(memory.p + dst, src, srcSize); @@ -212,8 +208,7 @@ hfResult(wasm_val_vec_t* results, int32_t value) std::nullptr_t hfResult(wasm_val_vec_t* results, HostFunctionError value) { - results->data[0] = WASM_I32_VAL( - static_cast>(value)); + results->data[0] = WASM_I32_VAL(HfErrorToInt(value)); results->num_elems = 1; return nullptr; } diff --git a/src/xrpld/app/wasm/detail/WasmVM.cpp b/src/xrpld/app/wasm/detail/WasmVM.cpp index 7d20f67fa1..335d406254 100644 --- a/src/xrpld/app/wasm/detail/WasmVM.cpp +++ b/src/xrpld/app/wasm/detail/WasmVM.cpp @@ -150,7 +150,7 @@ runEscrowWasm( std::cout << ", ret: " << ret->result << ", gas spent: " << ret->cost << std::endl; #endif - return EscrowResult{ret->result > 0, ret->cost}; + return EscrowResult{ret->result, ret->cost}; } NotTEC