go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

commit 2bffe532f21eb6450794553e382da370be2b98de
parent bc0a2b3cd33c6eb6cb07f2e53bc2310779bb63cb
Author: lash <dev@holbrook.no>
Date:   Tue,  4 Feb 2025 13:22:33 +0000

Add bytecode guard to exported engine reset

Diffstat:
Mengine/db.go | 13++++++++++++-
Mengine/engine.go | 5+++++
2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/engine/db.go b/engine/db.go @@ -576,7 +576,7 @@ func (en *DefaultEngine) Flush(ctx context.Context, w io.Writer) (int, error) { l += n } if en.exiting { - _, err = en.Reset(ctx) + _, err = en.reset(ctx) en.exiting = false } @@ -585,6 +585,17 @@ func (en *DefaultEngine) Flush(ctx context.Context, w io.Writer) (int, error) { // start execution over at top node while keeping current state of client error flags. func (en *DefaultEngine) Reset(ctx context.Context) (bool, error) { + b, err := en.st.GetCode() + if err != nil { + return false, err + } + if len(b) > 0 { + return false, ErrCodeRemaining + } + return en.reset(ctx) +} + +func (en *DefaultEngine) reset(ctx context.Context) (bool, error) { var err error var isTop bool logg.DebugCtxf(ctx, "entering engine reset", "state", en.st) diff --git a/engine/engine.go b/engine/engine.go @@ -2,9 +2,14 @@ package engine import ( "context" + "fmt" "io" ) +var ( + ErrCodeRemaining = fmt.Errorf("bytecode remaining") +) + // EngineIsh defines the interface for execution engines that handle vm initialization and execution, and rendering outputs. type Engine interface { // Init sets the engine up for vm execution. It must be called before Exec.