Skip to content

DocumentIterator usage can corrupt data if you forget to zero/nil your buffer #39

@mashbourne

Description

@mashbourne

Since it is a slice reference, any nested structs or arrays in your data will be sparsely overwritten during iteration and can still include old data from past iteration if you follow the docs:

	// ...
	var docs []Document

	iterator := documentdb.NewIterator(
		client, documentdb.NewDocumentIterator("coll_self_link", nil, &docs, documentdb.PartitionKey("1"), documentdb.Limit(1)),
	)

	for iterator.Next() {
		if err := iterator.Error(); err != nil {
			log.Fatal(err)
		}
		fmt.Println(len(docs))
	}    

	// ...
}```

Instead, nil the buffer like this:

func main() {
// ...
var docs []Document

iterator := documentdb.NewIterator(
	client, documentdb.NewDocumentIterator("coll_self_link", nil, &docs, documentdb.PartitionKey("1"), documentdb.Limit(1)),
)

for iterator.Next() {
	if err := iterator.Error(); err != nil {
		log.Fatal(err)
	}
	fmt.Println(len(docs))
            docs = nil // zero your buffer to avoid corrupt data!
}    

// ...

}```

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions