nspcc-dev/neo-go

Item cast to struct does not ensure/convert field type

Fechada

#3.610 aberto em 11 de out. de 2024

 (0 comentário) (0 reação) (0 responsável)Go (108 forks)auto 404
I4S4U3bugcompilerhelp wanted

Métricas do repositório

Stars
 (132 estrelas)
Métricas de merge de PR
 (Mesclagem média 4d 19h) (16 fundiu PRs em 30d)

Description

Tried to cast item from contract's storage and use it.

Current Behavior

	newNodes := storage.Find(ctx, newNodesPrefix, storage.None)
	for iterator.Next(newNodes) {
		newNode := iterator.Value(newNodes).(struct {
			key []byte
			val []byte
		})

		newNode.key[0] = 1
	}

leads to SETITEM: invalid item type ByteString

newNode.key[:][0] = 1 solves the issue... why?

Expected Behavior

I said (asserted/converted) that it is a []byte, i want to use it as []byte.

Possible Solution

Ensure, cast or throw an exception at .() operator, not when it is tried to be used later.

Steps to Reproduce

Code from Current Behavior.

Context

https://github.com/nspcc-dev/neofs-contract/pull/438#discussion_r1786975526

Regression

Not sure.

Your Environment

github.com/nspcc-dev/neo-go v0.106.3

Guia do colaborador