graph
graph copied to clipboard
AdjacencyMap may cause panic
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

ListVertices and ListEdges directly occur AddVertex and AddEdge will cause this problem
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 Yes. AdjacencyMap should behave exactly as PredecessorMap since these functions do the same thing but complement each other.
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.