about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAlan Pearce2025-03-11 19:35:48 +0100
committerAlan Pearce2025-03-11 19:35:48 +0100
commitd99fb7b6585837a02f43d1c3f37ed172baa1bf5d (patch)
tree891e2f36f6a817eba1c755fdc77ff885a44cf5e9
parentfd19126c36267a65c0f3b5b5e27009a2b7899368 (diff)
downloadsearchix-d99fb7b6585837a02f43d1c3f37ed172baa1bf5d.tar.lz
searchix-d99fb7b6585837a02f43d1c3f37ed172baa1bf5d.tar.zst
searchix-d99fb7b6585837a02f43d1c3f37ed172baa1bf5d.zip
fix: panic when source order > number of sources
Fixes: https://todo.sr.ht/~alanpearce/searchix/13
-rw-r--r--internal/server/mux.go15
1 files changed, 11 insertions, 4 deletions
diff --git a/internal/server/mux.go b/internal/server/mux.go
index 6abf84f..37435d4 100644
--- a/internal/server/mux.go
+++ b/internal/server/mux.go
@@ -1,14 +1,18 @@
 package server
 
 import (
+	"cmp"
 	"context"
 	"encoding/xml"
 	"fmt"
+	"maps"
 	"math"
 	"net/http"
 	"net/url"
 	"path"
+	"slices"
 	"strconv"
+	"strings"
 	"time"
 
 	"go.alanpearce.eu/searchix/frontend"
@@ -47,10 +51,13 @@ func applyDevModeOverrides(cfg *config.Config) {
 }
 
 func sortSources(ss map[string]*config.Source) {
-	sources = make([]*config.Source, len(ss))
-	for _, v := range ss {
-		sources[v.Order] = v
-	}
+	sources = slices.SortedFunc(maps.Values(ss), func(a, b *config.Source) int {
+		return cmp.Or(
+			cmp.Compare(a.Order, b.Order),
+			strings.Compare(a.Key, b.Key),
+			strings.Compare(a.Name, b.Name),
+		)
+	})
 }
 
 func NewMux(