From 9c3ea82ba777924f8b78a6606504d3ca3eb00128 Mon Sep 17 00:00:00 2001 From: Remy Suen Date: Thu, 12 Jun 2025 09:32:08 -0400 Subject: [PATCH] Check node types before casting when looking up references in other files Signed-off-by: Remy Suen --- CHANGELOG.md | 2 ++ internal/compose/definition.go | 8 +++++--- internal/compose/definition_test.go | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e64d63..87bea1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ All notable changes to the Docker Language Server will be documented in this fil - Compose - textDocument/completion - fix error case triggered by using code completion before the first node ([#314](https://github.com/docker/docker-language-server/issues/314)) + - textDocument/definition + - check the type of a dependency node's value before assuming it is a map and recursing into it ([#324](https://github.com/docker/docker-language-server/issues/324)) - textDocument/hover - protect the processing of included files if the node is not a proper array ([#322](https://github.com/docker/docker-language-server/issues/322)) - Bake diff --git a/internal/compose/definition.go b/internal/compose/definition.go index 00e9402..03f7fb6 100644 --- a/internal/compose/definition.go +++ b/internal/compose/definition.go @@ -68,9 +68,11 @@ func dependencyLookup(doc document.ComposeDocument, dependencyType, name string) if mappingNode, ok := doc.Body.(*ast.MappingNode); ok { for _, node := range mappingNode.Values { if s, ok := node.Key.(*ast.StringNode); ok && s.Value == dependencyType { - for _, service := range node.Value.(*ast.MappingNode).Values { - if s, ok := service.Key.(*ast.StringNode); ok && s.Value == name { - return service, u + if m, ok := node.Value.(*ast.MappingNode); ok { + for _, service := range m.Values { + if s, ok := service.Key.(*ast.StringNode); ok && s.Value == name { + return service, u + } } } } diff --git a/internal/compose/definition_test.go b/internal/compose/definition_test.go index 85fd67c..b6cf3a5 100644 --- a/internal/compose/definition_test.go +++ b/internal/compose/definition_test.go @@ -443,6 +443,22 @@ services: }, }, }, + { + name: "dependent file is not defined properly", + content: ` +include: + - compose.other.yaml +services: + test: + networks: + - other`, + otherContent: ` +networks: string`, + line: 6, + character: 11, + locations: nil, + links: nil, + }, } for _, tc := range testCases {