Skip to content

Commit

Permalink
panic on invalid pointer cast
Browse files Browse the repository at this point in the history
  • Loading branch information
jimjbrettj committed Apr 24, 2023
1 parent 8da5f3c commit 2f100f6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 15 deletions.
28 changes: 13 additions & 15 deletions lib/runtime/wasmer/imports.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ func ext_crypto_ed25519_generate_version_1(env interface{}, args []wasmer.Value)
castedRet, err := safeCastInt32(ret)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

logger.Debug("generated ed25519 keypair with public key: " + kp.Public().Hex())
Expand Down Expand Up @@ -527,7 +527,7 @@ func ext_crypto_sr25519_generate_version_1(env interface{}, args []wasmer.Value)
castedRet, err := safeCastInt32(ret)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

logger.Debug("generated sr25519 keypair with public key: " + kp.Public().Hex())
Expand Down Expand Up @@ -801,12 +801,11 @@ func ext_trie_blake2_256_root_version_1(env interface{}, args []wasmer.Value) ([
castedPtr, err := safeCastInt32(ptr)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

logger.Debugf("root hash is %s", hash)
copy(memory[ptr:ptr+32], hash[:])
// TODO should i use cased pointer above? Maybe should just panic if safeCast fails
return []wasmer.Value{wasmer.NewI32(castedPtr)}, nil
}

Expand Down Expand Up @@ -862,12 +861,11 @@ func ext_trie_blake2_256_ordered_root_version_1(env interface{}, args []wasmer.V
castedPtr, err := safeCastInt32(ptr)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

logger.Debugf("root hash is %s", hash)
copy(memory[ptr:ptr+32], hash[:])
// TODO use casted pointer here? Maybe panic?
return []wasmer.Value{wasmer.NewI32(castedPtr)}, nil
}

Expand Down Expand Up @@ -1336,7 +1334,7 @@ func ext_allocator_malloc_version_1(env interface{}, args []wasmer.Value) ([]was
castedRes, err := safeCastInt32(res)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

return []wasmer.Value{wasmer.NewI32(castedRes)}, nil
Expand Down Expand Up @@ -1368,7 +1366,7 @@ func ext_hashing_blake2_128_version_1(env interface{}, args []wasmer.Value) ([]w
castedOut, err := safeCastInt32(out)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

return []wasmer.Value{wasmer.NewI32(castedOut)}, nil
Expand Down Expand Up @@ -1398,7 +1396,7 @@ func ext_hashing_blake2_256_version_1(env interface{}, args []wasmer.Value) ([]w
castedOut, err := safeCastInt32(out)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

return []wasmer.Value{wasmer.NewI32(castedOut)}, nil
Expand Down Expand Up @@ -1428,7 +1426,7 @@ func ext_hashing_keccak_256_version_1(env interface{}, args []wasmer.Value) ([]w
castedOut, err := safeCastInt32(out)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

return []wasmer.Value{wasmer.NewI32(castedOut)}, nil
Expand All @@ -1453,7 +1451,7 @@ func ext_hashing_sha2_256_version_1(env interface{}, args []wasmer.Value) ([]was
castedOut, err := safeCastInt32(out)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

return []wasmer.Value{wasmer.NewI32(castedOut)}, nil
Expand Down Expand Up @@ -1483,7 +1481,7 @@ func ext_hashing_twox_256_version_1(env interface{}, args []wasmer.Value) ([]was
castedOut, err := safeCastInt32(out)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

return []wasmer.Value{wasmer.NewI32(castedOut)}, nil
Expand Down Expand Up @@ -1515,7 +1513,7 @@ func ext_hashing_twox_128_version_1(env interface{}, args []wasmer.Value) ([]was
castedOut, err := safeCastInt32(out)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

return []wasmer.Value{wasmer.NewI32(castedOut)}, nil
Expand Down Expand Up @@ -1547,7 +1545,7 @@ func ext_hashing_twox_64_version_1(env interface{}, args []wasmer.Value) ([]wasm
castedOut, err := safeCastInt32(out)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

return []wasmer.Value{wasmer.NewI32(castedOut)}, nil
Expand Down Expand Up @@ -1754,7 +1752,7 @@ func ext_offchain_random_seed_version_1(env interface{}, _ []wasmer.Value) ([]wa
castedPtr, err := safeCastInt32(ptr)
if err != nil {
logger.Errorf("failed to safely cast pointer: %s", err)
return []wasmer.Value{wasmer.NewI32(0)}, nil
return []wasmer.Value{wasmer.NewI32(0)}, err
}

return []wasmer.Value{wasmer.NewI32(castedPtr)}, nil
Expand Down
3 changes: 3 additions & 0 deletions lib/runtime/wasmer/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,9 @@ func (in *Instance) Exec(function string, data []byte) (result []byte, err error

wasmValue, err := runtimeFunc(castedInputPointer, castedDataLength)
if err != nil {
if errors.Is(err, errMemoryValueOutOfBounds) {
panic(fmt.Errorf("executing runtime function: %v", err))
}
return nil, fmt.Errorf("running runtime function: %w", err)
}

Expand Down

0 comments on commit 2f100f6

Please sign in to comment.