From c29c4fd4074b7c82bf24749487af3f1fb87a6451 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 27 Mar 2019 16:04:35 +0100 Subject: libtracker-data: Fix infinite recursion on positive doubles A c&p typo made the DOUBLE_POSITIVE terminal defined upon itself, it should be defined on top of DOUBLE. --- src/libtracker-data/tracker-sparql-grammar.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtracker-data/tracker-sparql-grammar.h b/src/libtracker-data/tracker-sparql-grammar.h index 0a01c9066..d7c578b64 100644 --- a/src/libtracker-data/tracker-sparql-grammar.h +++ b/src/libtracker-data/tracker-sparql-grammar.h @@ -1958,7 +1958,7 @@ terminal_DOUBLE_POSITIVE (const gchar *str, const gchar **str_out) { ACCEPT_CHAR ((ch == '+')); - return terminal_DOUBLE_POSITIVE (str, end, str_out); + return terminal_DOUBLE (str, end, str_out); } /* INTEGER_NEGATIVE ::= '-' INTEGER -- cgit v1.2.1 From 5587a87c47c36f14ddcaac9e2df84c67897720be Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 27 Mar 2019 16:06:24 +0100 Subject: libtracker-data: Handle doubles before other numeric types Otherwise there are greediness issues as the definition of DECIMAL fits within DOUBLE and wins over it, leaving the exponential part out of the match. Closes: https://gitlab.gnome.org/GNOME/tracker/issues/84 --- src/libtracker-data/tracker-sparql-grammar.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libtracker-data/tracker-sparql-grammar.h b/src/libtracker-data/tracker-sparql-grammar.h index d7c578b64..0dbbf2e62 100644 --- a/src/libtracker-data/tracker-sparql-grammar.h +++ b/src/libtracker-data/tracker-sparql-grammar.h @@ -569,7 +569,7 @@ static const TrackerGrammarRule rule_BooleanLiteral[] = { OR(helper_BooleanLiter * TRACKER EXTENSION: * The terminal PARAMETERIZED_VAR is additionally accepted */ -static const TrackerGrammarRule helper_NumericLiteralNegative_or[] = { T(DECIMAL_NEGATIVE), T(DOUBLE_NEGATIVE), T(INTEGER_NEGATIVE), T(PARAMETERIZED_VAR), NIL }; +static const TrackerGrammarRule helper_NumericLiteralNegative_or[] = { T(DOUBLE_NEGATIVE), T(DECIMAL_NEGATIVE), T(INTEGER_NEGATIVE), T(PARAMETERIZED_VAR), NIL }; static const TrackerGrammarRule rule_NumericLiteralNegative[] = { OR(helper_NumericLiteralNegative_or), NIL }; /* NumericLiteralPositive ::= INTEGER_POSITIVE | DECIMAL_POSITIVE | DOUBLE_POSITIVE @@ -577,7 +577,7 @@ static const TrackerGrammarRule rule_NumericLiteralNegative[] = { OR(helper_Nume * TRACKER EXTENSION: * The terminal PARAMETERIZED_VAR is additionally accepted */ -static const TrackerGrammarRule helper_NumericLiteralPositive_or[] = { T(DECIMAL_POSITIVE), T(DOUBLE_POSITIVE), T(INTEGER_POSITIVE), T(PARAMETERIZED_VAR), NIL }; +static const TrackerGrammarRule helper_NumericLiteralPositive_or[] = { T(DOUBLE_POSITIVE), T(DECIMAL_POSITIVE), T(INTEGER_POSITIVE), T(PARAMETERIZED_VAR), NIL }; static const TrackerGrammarRule rule_NumericLiteralPositive[] = { OR(helper_NumericLiteralPositive_or), NIL }; /* NumericLiteralUnsigned ::= INTEGER | DECIMAL | DOUBLE @@ -585,7 +585,7 @@ static const TrackerGrammarRule rule_NumericLiteralPositive[] = { OR(helper_Nume * TRACKER EXTENSION: * The terminal PARAMETERIZED_VAR is additionally accepted */ -static const TrackerGrammarRule helper_NumericLiteralUnsigned_or[] = { T(DECIMAL), T(DOUBLE), T(INTEGER), T(PARAMETERIZED_VAR), NIL }; +static const TrackerGrammarRule helper_NumericLiteralUnsigned_or[] = { T(DOUBLE), T(DECIMAL), T(INTEGER), T(PARAMETERIZED_VAR), NIL }; static const TrackerGrammarRule rule_NumericLiteralUnsigned[] = { OR(helper_NumericLiteralUnsigned_or), NIL }; /* NumericLiteral ::= NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative -- cgit v1.2.1