nspcc-dev/neo-go

Item cast to struct does not ensure/convert field type

已关闭

#3,610 创建于 2024年10月11日

 (0 条评论) (0 个反应) (0 位负责人)Go (108 个派生)auto 404
I4S4U3bugcompilerhelp wanted

仓库指标

星标
 (132 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

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

贡献者指南