{"record":{"id":"f6b007019f6c23b2","repo":"redis/go-redis","slug":"invalid-synonym-format","errorCode":null,"errorMessage":"invalid synonym format","messagePattern":"invalid synonym format","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"search_commands.go","lineNumber":3644,"sourceCode":"\t}\n\n\tvar results []FTSynDumpResult\n\tfor i := 0; i < len(termSynonymPairs); i += 2 {\n\t\tterm, ok := termSynonymPairs[i].(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid term format\")\n\t\t}\n\n\t\tsynonyms, ok := termSynonymPairs[i+1].([]interface{})\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid synonyms format\")\n\t\t}\n\n\t\tsynonymList := make([]string, len(synonyms))\n\t\tfor j, syn := range synonyms {\n\t\t\tsynonym, ok := syn.(string)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"invalid synonym format\")\n\t\t\t}\n\t\t\tsynonymList[j] = synonym\n\t\t}\n\n\t\tresults = append(results, FTSynDumpResult{\n\t\t\tTerm:     term,\n\t\t\tSynonyms: synonymList,\n\t\t})\n\t}\n\n\tcmd.val = results\n\treturn nil\n}\n\n// parseFTSynDumpRESP3 parses the RESP3 format response from FT.SYNDUMP.\n// RESP3 format:\n//\n//\tmap{","sourceCodeStart":3626,"sourceCodeEnd":3662,"githubUrl":"https://github.com/redis/go-redis/blob/c5cad058c72f58370553b48566302303cf8a2e89/search_commands.go#L3626-L3662","documentation":"Within a FTSYNUMP synonym list, every element must be a string. The client fails with this error if any element of the synonym array decodes to a non-string Go value.","triggerScenarios":"Reading an FTSynDump reply over RESP2 where a synonym array contains a non-string element (numbers, nested arrays), typically from a malformed mock or an intermediary altering element types.","commonSituations":"Hand-written test fixtures with wrong synonym types; RESP proxies that encode synonyms as bulk integers; server plugin anomalies.","solutions":["Fix the reply source so all synonyms are strings (RESP bulk strings).","Check whether a proxy or codec layer is changing element types.","Switch to Protocol: 3 and verify the RESP3 map path parses correctly."],"exampleFix":"// before: []interface{}{\"term\", []interface{}{42}}\n// after:  []interface{}{\"term\", []interface{}{\"syn1\"}}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":"for _, s := range syns {\n    if _, ok := s.(string); !ok { /* non-string synonym */ }\n}","tryCatchPattern":"res, err := client.FTSynDump(ctx, \"idx\").Result()\nif err != nil && strings.Contains(err.Error(), \"invalid synonym format\") {\n    // inspect RawVal; correct reply source\n}","preventionTips":["Keep all synonyms as bulk strings in fixtures","Check codec layers that may retag elements","Compare against a real server reply"],"tags":["search","parsing","resp2","ft-syndump"],"backgroundTag":"unexpected-response-type","analyzedSha":"c5cad058c72f58370553b48566302303cf8a2e89","analyzedAt":"2026-09-01T06:50:53.388Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}