From 4149767391a7855faa881743a6d85a3adca160f7 Mon Sep 17 00:00:00 2001 From: Joe Elliott Date: Mon, 15 Dec 2025 04:41:24 -0500 Subject: [PATCH] Tempo: Correctly escape/unescape tag when looking for tag values (#114275) * Correctly escape/unescape tag Signed-off-by: Joe Elliott * changelog Signed-off-by: Joe Elliott * Revert "changelog" This reverts commit e0cde18994c67fbdd601514d2f930798b0ae76c6. --------- Signed-off-by: Joe Elliott --- pkg/tsdb/tempo/tempo.go | 10 +++++++++- .../app/plugins/datasource/tempo/language_provider.ts | 4 +--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pkg/tsdb/tempo/tempo.go b/pkg/tsdb/tempo/tempo.go index 1224c3b7029..cb797184a60 100644 --- a/pkg/tsdb/tempo/tempo.go +++ b/pkg/tsdb/tempo/tempo.go @@ -280,7 +280,15 @@ func (s *Service) handleTagValues(rw http.ResponseWriter, req *http.Request) { return } - tempoPath := fmt.Sprintf("api/v2/search/tag/%s/values", encodedTag) + // escape tag + tag, err := url.PathUnescape(encodedTag) + if err != nil { + s.logger.Error("Failed to unescape", "error", err, "tag", encodedTag) + http.Error(rw, "Invalid 'tag' parameter", http.StatusBadRequest) + return + } + + tempoPath := fmt.Sprintf("api/v2/search/tag/%s/values", tag) s.proxyToTempo(rw, req, tempoPath) } diff --git a/public/app/plugins/datasource/tempo/language_provider.ts b/public/app/plugins/datasource/tempo/language_provider.ts index f17ec67790f..ce28941e433 100644 --- a/public/app/plugins/datasource/tempo/language_provider.ts +++ b/public/app/plugins/datasource/tempo/language_provider.ts @@ -190,9 +190,7 @@ export default class TempoLanguageProvider extends LanguageProvider { * @returns the encoded tag */ private encodeTag = (tag: string): string => { - // If we call `encodeURIComponent` only once, we still get an error when issuing a request to the backend - // Reference: https://stackoverflow.com/a/37456192 - return encodeURIComponent(encodeURIComponent(tag)); + return encodeURIComponent(tag); }; generateQueryFromFilters({