Skip to content

Commit

Permalink
fix(search_family): Fix crash when no SEPARATOR is specified in the F…
Browse files Browse the repository at this point in the history
…T.CREATE command (#4205)

fix(search_family): fix(search_family): Fix crash when no SEPARATOR is specified in the FT.CREATE command

Signed-off-by: Stepan Bagritsevich <[email protected]>
  • Loading branch information
BagritsevichStepan authored Nov 27, 2024
1 parent 1ceca47 commit bd143e4
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/server/search/search_family.cc
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,18 @@ search::SchemaField::VectorParams ParseVectorParams(CmdArgParser* parser) {
return params;
}

search::SchemaField::TagParams ParseTagParams(CmdArgParser* parser) {
std::optional<search::SchemaField::TagParams> ParseTagParams(CmdArgParser* parser,
SinkReplyBuilder* builder) {
search::SchemaField::TagParams params{};
while (parser->HasNext()) {
if (parser->Check("SEPARATOR")) {
string_view separator = parser->Next();
std::string_view separator = parser->NextOrDefault();
if (separator.size() != 1) {
builder->SendError(
absl::StrCat("Tag separator must be a single character. Got `", separator, "`"),
kSyntaxErrType);
return std::nullopt;
}
params.separator = separator.front();
continue;
}
Expand Down Expand Up @@ -127,7 +134,11 @@ optional<search::Schema> ParseSchemaOrReply(DocIndex::DataType type, CmdArgParse
// Vector fields include: {algorithm} num_args args...
search::SchemaField::ParamsVariant params(monostate{});
if (type == search::SchemaField::TAG) {
params = ParseTagParams(&parser);
auto tag_params = ParseTagParams(&parser, builder);
if (!tag_params) {
return std::nullopt;
}
params = tag_params.value();
} else if (type == search::SchemaField::VECTOR) {
auto vector_params = ParseVectorParams(&parser);
if (parser.HasError()) {
Expand Down
5 changes: 5 additions & 0 deletions src/server/search/search_family_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,11 @@ TEST_F(SearchFamilyTest, Errors) {

// Wrong field type
EXPECT_THAT(Run({"ft.search", "i1", "@foo:lol"}), ErrArg("Wrong access type for field: foo"));

// ft.create index on json schema $.sometag AS sometag TAG SEPARATOR
EXPECT_THAT(Run({"ft.create", "i2", "ON", "JSON", "SCHEMA", "$.sometag", "AS", "sometag", "TAG",
"SEPARATOR"}),
ErrArg("Tag separator must be a single character. Got ``"));
}

TEST_F(SearchFamilyTest, NoPrefix) {
Expand Down

0 comments on commit bd143e4

Please sign in to comment.