graph icon indicating copy to clipboard operation
graph copied to clipboard

AdjacencyMap may cause panic

Open liuxiaomeiG opened this issue 2 years ago • 3 comments

Concurrent calls to AddVertex, AddEdge, and AdjacencyMap redundantly panic.

panic: assignment to entry in nil map

goroutine 1996 [running]:
github.com/dominikbraun/graph.(*undirected[...]).AdjacencyMap(0xc0009542c0?)
	github.com/dominikbraun/[email protected]/undirected.go:167 +0x225

image

ListVertices and ListEdges directly occur AddVertex and AddEdge will cause this problem

liuxiaomeiG avatar Apr 20 '23 08:04 liuxiaomeiG

We have experienced this also in a non concurrent environment. PredecessorMap() is guarded against nil access, I wonder if it was intended to leave it out in AdjacencyMap(). If not, would you accept a PR to add an initialization if the edge.Target is not found ?

davidovich avatar Oct 12 '23 18:10 davidovich

@davidovich Yes. AdjacencyMap should behave exactly as PredecessorMap since these functions do the same thing but complement each other.

dominikbraun avatar Oct 13 '23 11:10 dominikbraun

While investigating this issue, it appeared to me that the code is correct on assuming the presence of a vertex, hence it would be, IMHO, a bad fix to just initialize the map on an un-existing source vertex because that would create a degenerate edge.

In our implementation of the store interface, we hit a panic because the store was returning edges with vertices that did not exist. So I went and opened a PR for reporting that error instead of panicking.

davidovich avatar Oct 13 '23 20:10 davidovich