diff --git a/src/mod/event_handlers/mod_rayo/srgs.c b/src/mod/event_handlers/mod_rayo/srgs.c
index eaa32a9992..5da3bce693 100644
--- a/src/mod/event_handlers/mod_rayo/srgs.c
+++ b/src/mod/event_handlers/mod_rayo/srgs.c
@@ -33,7 +33,7 @@
#include "srgs.h"
#define MAX_RECURSION 100
-#define MAX_TAGS 30
+#define MAX_TAGS 1024
/** function to handle tag attributes */
typedef int (* tag_attribs_fn)(struct srgs_grammar *, char **);
diff --git a/src/mod/event_handlers/mod_rayo/test_srgs/main.c b/src/mod/event_handlers/mod_rayo/test_srgs/main.c
index 237e9edad3..a8f8a944f7 100644
--- a/src/mod/event_handlers/mod_rayo/test_srgs/main.c
+++ b/src/mod/event_handlers/mod_rayo/test_srgs/main.c
@@ -18,6 +18,79 @@ static const char *adhearsion_menu_grammar =
" \n"
"\n";
+static const char *adhearsion_large_menu_grammar =
+ ""
+ " \n"
+ " \n"
+ " - 01
\n"
+ " - 15
\n"
+ " - 27
\n"
+ " - 39
\n"
+ " - 4715
\n"
+ " - 5716
\n"
+ " - 6717
\n"
+ " - 7718
\n"
+ " - 8719
\n"
+ " - 9720
\n"
+ " - 10721
\n"
+ " - 11722
\n"
+ " - 12723
\n"
+ " - 13724
\n"
+ " - 14725
\n"
+ " - 15726
\n"
+ " - 16727
\n"
+ " - 17728
\n"
+ " - 18729
\n"
+ " - 19730
\n"
+ " - 20731
\n"
+ " - 21732
\n"
+ " - 22733
\n"
+ " - 23734
\n"
+ " - 24735
\n"
+ " - 25736
\n"
+ " - 26737
\n"
+ " - 27738
\n"
+ " - 28739
\n"
+ " - 29740
\n"
+ " - 30741
\n"
+ " - 31742
\n"
+ " - 32743
\n"
+ " - 33744
\n"
+ " - 34745
\n"
+ " - 35746
\n"
+ " - 36747
\n"
+ " - 37748
\n"
+ " - 38749
\n"
+ " - 39750
\n"
+ " - 40751
\n"
+ " - 41752
\n"
+ " - 42753
\n"
+ " - 43754
\n"
+ " - 44755
\n"
+ " - 45756
\n"
+ " - 46757
\n"
+ " - 47758
\n"
+ " - 48759
\n"
+ " - 49760
\n"
+ " - 50761
\n"
+ " - 51762
\n"
+ " - 52763
\n"
+ " - 53764
\n"
+ " - 54765
\n"
+ " - 55766
\n"
+ " - 56767
\n"
+ " - 57768
\n"
+ " - 58769
\n"
+ " - 59770
\n"
+ " - 60771
\n"
+ " - 61772
\n"
+ " - 62773
\n"
+ " - 63774
\n"
+ " - 64775
\n"
+ " \n"
+ " \n"
+ "\n";
+
/**
* Test matching against adhearsion menu grammar
*/
@@ -68,6 +141,58 @@ static void test_match_adhearsion_menu_grammar(void)
srgs_parser_destroy(parser);
}
+/**
+ * Test matching against adhearsion menu grammar
+ */
+static void test_match_adhearsion_large_menu_grammar(void)
+{
+ struct srgs_parser *parser;
+ struct srgs_grammar *grammar;
+ const char *interpretation;
+
+ parser = srgs_parser_new("1234");
+ ASSERT_NOT_NULL((grammar = srgs_parse(parser, adhearsion_large_menu_grammar)));
+
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "0", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "1", &interpretation));
+ ASSERT_STRING_EQUALS("0", interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "2", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "3", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "4", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "5", &interpretation));
+ ASSERT_STRING_EQUALS("1", interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "6", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_MATCH, srgs_grammar_match(grammar, "7", &interpretation));
+ ASSERT_STRING_EQUALS("2", interpretation);
+ ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "715", &interpretation));
+ ASSERT_STRING_EQUALS("4", interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "8", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "9", &interpretation));
+ ASSERT_STRING_EQUALS("3", interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "#", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "*", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "A", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "27", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "223", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "0123456789*#", &interpretation));
+ ASSERT_NULL(interpretation);
+ ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "761", &interpretation));
+ ASSERT_STRING_EQUALS("50", interpretation);
+
+ srgs_parser_destroy(parser);
+}
+
static const char *duplicate_tag_grammar =
""
" \n"
@@ -1088,6 +1213,7 @@ int main(int argc, char **argv)
srgs_init();
TEST(test_parse_grammar);
TEST(test_match_adhearsion_menu_grammar);
+ TEST(test_match_adhearsion_large_menu_grammar);
TEST(test_match_duplicate_tag_grammar);
TEST(test_match_adhearsion_ask_grammar);
TEST(test_match_multi_digit_grammar);