diff --git a/src/wasm/wasm-ir-builder.cpp b/src/wasm/wasm-ir-builder.cpp index 46986b0e80d..0bb72a8a62a 100644 --- a/src/wasm/wasm-ir-builder.cpp +++ b/src/wasm/wasm-ir-builder.cpp @@ -1412,6 +1412,9 @@ Result<> IRBuilder::makeLocalGet(Index local) { if (!func) { return Err{"local.get is only valid in a function context"}; } + if (local >= func->getNumLocals()) { + return Err{"invalid local.get index"}; + } push(builder.makeLocalGet(local, func->getLocalType(local))); return Ok{}; } @@ -1420,6 +1423,9 @@ Result<> IRBuilder::makeLocalSet(Index local) { if (!func) { return Err{"local.set is only valid in a function context"}; } + if (local >= func->getNumLocals()) { + return Err{"invalid local.set index"}; + } LocalSet curr; curr.index = local; CHECK_ERR(visitLocalSet(&curr)); @@ -1431,6 +1437,9 @@ Result<> IRBuilder::makeLocalTee(Index local) { if (!func) { return Err{"local.tee is only valid in a function context"}; } + if (local >= func->getNumLocals()) { + return Err{"invalid local.tee index"}; + } LocalSet curr; curr.index = local; CHECK_ERR(visitLocalSet(&curr));