nspcc-dev/neo-go

Item cast to struct does not ensure/convert field type

Geschlossen

#3.610 geöffnet am 11.10.2024

 (0 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)Go (108 Forks)auto 404
I4S4U3bugcompilerhelp wanted

Repository-Metriken

Stars
 (132 Sterne)
PR-Merge-Metriken
 (PR-Metriken ausstehend)

Beschreibung

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

Contributor Guide