nspcc-dev/neo-go

Item cast to struct does not ensure/convert field type

クローズ

#3,610 opened on 2024/10/11

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)Go (108 件のフォーク)auto 404
I4S4U3bugcompilerhelp wanted

Repository metrics

Stars
 (132 個のスター)
PR merge metrics
 (PR metrics pending)

説明

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

コントリビューターガイド