nspcc-dev/neo-go

Item cast to struct does not ensure/convert field type

Fermée

#3 610 ouverte le 11 oct. 2024

 (0 commentaire) (0 réaction) (0 personne assignée)Go (108 forks)auto 404
I4S4U3bugcompilerhelp wanted

Métriques du dépôt

Stars
 (132 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

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

Guide contributeur