nspcc-dev/neo-go

Item cast to struct does not ensure/convert field type

Chiusa

#3610 aperta il 11 ott 2024

 (0 commenti) (0 reazioni) (0 assegnatari)Go (108 fork)auto 404
I4S4U3bugcompilerhelp wanted

Metriche repository

Star
 (132 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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

Guida contributor