diff --git a/res/res_sorcery_realtime.c b/res/res_sorcery_realtime.c index 8807c01961ae0d04c381c7892f246b4efbebdc6c..1a30e0c59085f4bea841bd1b8c5d305e611d194c 100644 --- a/res/res_sorcery_realtime.c +++ b/res/res_sorcery_realtime.c @@ -218,16 +218,12 @@ static void sorcery_realtime_retrieve_multiple(const struct ast_sorcery *sorcery static void sorcery_realtime_retrieve_regex(const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects, const char *regex) { - char field[strlen(UUID_FIELD) + 6], value[strlen(regex) + 2]; + char field[strlen(UUID_FIELD) + 6], value[strlen(regex) + 3]; RAII_VAR(struct ast_variable *, fields, NULL, ast_variables_destroy); /* The realtime API provides no direct ability to do regex so for now we support a limited subset using pattern matching */ - if (regex[0] != '^') { - return; - } - snprintf(field, sizeof(field), "%s LIKE", UUID_FIELD); - snprintf(value, sizeof(value), "%s%%", regex + 1); + snprintf(value, sizeof(value), "%%%s%%", regex); if (!(fields = ast_variable_new(field, value, ""))) { return; diff --git a/tests/test_sorcery_realtime.c b/tests/test_sorcery_realtime.c index 347280d897eb65498cb14b612159333f58f51e8f..76dfb660359f09c587a05b8da83924db50330f8e 100644 --- a/tests/test_sorcery_realtime.c +++ b/tests/test_sorcery_realtime.c @@ -67,17 +67,13 @@ static int realtime_is_object_matching(const char *object_id, const struct ast_v /* If we are doing a pattern matching we need to remove the LIKE from the name */ if ((like = strstr(name, " LIKE"))) { - char *pattern, *field_value = ast_strdupa(field->value); + char *field_value = ast_strdupa(field->value); *like = '\0'; value = ast_strdupa(ast_variable_retrieve(realtime_objects, object_id, name)); - if (!(pattern = strchr(field_value, '%'))) { - return 0; - } - - *pattern = '\0'; + field_value = ast_strip_quoted(field_value, "%", "%"); if (strncmp(value, field_value, strlen(field_value))) { return 0; @@ -567,7 +563,7 @@ AST_TEST_DEFINE(object_retrieve_regex) return AST_TEST_FAIL; } - if (!(objects = ast_sorcery_retrieve_by_regex(sorcery, "test", "^blah-"))) { + if (!(objects = ast_sorcery_retrieve_by_regex(sorcery, "test", "blah-"))) { ast_test_status_update(test, "Failed to retrieve a container of objects\n"); return AST_TEST_FAIL; } else if (ao2_container_count(objects) != 2) {