summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-06-17 11:49:05 +0200
committerCarlos Garnacho <carlosg@gnome.org>2018-11-13 11:17:31 +0100
commit4e7ca8ee05a7d4d34a4c83faa50bbeca5f8ad756 (patch)
treedb0735693bb09b402ff3015e2ca6aff895d178bb
parent9e3b618b8788306e568421a875786c0e714e0705 (diff)
downloadtracker-4e7ca8ee05a7d4d34a4c83faa50bbeca5f8ad756.tar.gz
libtracker-data: Add syntax support for parameterized variables
These variables (with "~var" syntax) will be bound through API, providing a decent protection against injections. They can be used in every place a boolean/numeric/string literal is allowed.
-rw-r--r--src/libtracker-data/tracker-sparql-grammar.h38
1 files changed, 33 insertions, 5 deletions
diff --git a/src/libtracker-data/tracker-sparql-grammar.h b/src/libtracker-data/tracker-sparql-grammar.h
index fc03a0d1e..75f5f801c 100644
--- a/src/libtracker-data/tracker-sparql-grammar.h
+++ b/src/libtracker-data/tracker-sparql-grammar.h
@@ -486,6 +486,7 @@ typedef enum {
TERMINAL_TYPE_STRING_LITERAL_LONG2,
TERMINAL_TYPE_NIL,
TERMINAL_TYPE_ANON,
+ TERMINAL_TYPE_PARAMETERIZED_VAR,
N_TERMINAL_TYPES
} TrackerGrammarTerminalType;
@@ -548,28 +549,43 @@ static const TrackerGrammarRule helper_iri_or[] = { T(IRIREF), R(PrefixedName),
static const TrackerGrammarRule rule_iri[] = { OR(helper_iri_or), NIL };
/* String ::= STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2
+ *
+ * TRACKER EXTENSION:
+ * The terminal PARAMETERIZED_VAR is additionally accepted
*/
-static const TrackerGrammarRule helper_String_or[] = { T(STRING_LITERAL1), T(STRING_LITERAL2), T(STRING_LITERAL_LONG1), T(STRING_LITERAL_LONG2), NIL };
+static const TrackerGrammarRule helper_String_or[] = { T(STRING_LITERAL1), T(STRING_LITERAL2), T(STRING_LITERAL_LONG1), T(STRING_LITERAL_LONG2), T(PARAMETERIZED_VAR), NIL };
static const TrackerGrammarRule rule_String[] = { OR(helper_String_or), NIL };
/* BooleanLiteral ::= 'true' | 'false'
+ *
+ * TRACKER EXTENSION:
+ * The terminal PARAMETERIZED_VAR is additionally accepted
*/
-static const TrackerGrammarRule helper_BooleanLiteral_or[] = { L(TRUE), L(FALSE), NIL };
+static const TrackerGrammarRule helper_BooleanLiteral_or[] = { L(TRUE), L(FALSE), T(PARAMETERIZED_VAR), NIL };
static const TrackerGrammarRule rule_BooleanLiteral[] = { OR(helper_BooleanLiteral_or), NIL };
/* NumericLiteralNegative ::= INTEGER_NEGATIVE | DECIMAL_NEGATIVE | DOUBLE_NEGATIVE
+ *
+ * TRACKER EXTENSION:
+ * The terminal PARAMETERIZED_VAR is additionally accepted
*/
-static const TrackerGrammarRule helper_NumericLiteralNegative_or[] = { T(DECIMAL_NEGATIVE), T(DOUBLE_NEGATIVE), T(INTEGER_NEGATIVE), NIL };
+static const TrackerGrammarRule helper_NumericLiteralNegative_or[] = { T(DECIMAL_NEGATIVE), T(DOUBLE_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
+ *
+ * TRACKER EXTENSION:
+ * The terminal PARAMETERIZED_VAR is additionally accepted
*/
-static const TrackerGrammarRule helper_NumericLiteralPositive_or[] = { T(DECIMAL_POSITIVE), T(DOUBLE_POSITIVE), T(INTEGER_POSITIVE), NIL };
+static const TrackerGrammarRule helper_NumericLiteralPositive_or[] = { T(DECIMAL_POSITIVE), T(DOUBLE_POSITIVE), T(INTEGER_POSITIVE), T(PARAMETERIZED_VAR), NIL };
static const TrackerGrammarRule rule_NumericLiteralPositive[] = { OR(helper_NumericLiteralPositive_or), NIL };
/* NumericLiteralUnsigned ::= INTEGER | DECIMAL | DOUBLE
+ *
+ * TRACKER EXTENSION:
+ * The terminal PARAMETERIZED_VAR is additionally accepted
*/
-static const TrackerGrammarRule helper_NumericLiteralUnsigned_or[] = { T(DECIMAL), T(DOUBLE), T(INTEGER), NIL };
+static const TrackerGrammarRule helper_NumericLiteralUnsigned_or[] = { T(DECIMAL), T(DOUBLE), T(INTEGER), T(PARAMETERIZED_VAR), NIL };
static const TrackerGrammarRule rule_NumericLiteralUnsigned[] = { OR(helper_NumericLiteralUnsigned_or), NIL };
/* NumericLiteral ::= NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative
@@ -1821,6 +1837,17 @@ terminal_VAR2 (const gchar *str,
return terminal_VARNAME (str, end, str_out);
}
+/* PARAMETERIZED_VAR ::= '~' VARNAME
+ */
+static inline gboolean
+terminal_PARAMETERIZED_VAR (const gchar *str,
+ const gchar *end,
+ const gchar **str_out)
+{
+ ACCEPT_CHAR((ch == '~'));
+ return terminal_VARNAME (str, end, str_out);
+}
+
/* LANGTAG ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*
*/
static inline gboolean
@@ -2272,6 +2299,7 @@ static const TrackerTerminalFunc terminal_funcs[N_TERMINAL_TYPES] = {
terminal_STRING_LITERAL_LONG2,
terminal_NIL,
terminal_ANON,
+ terminal_PARAMETERIZED_VAR,
};
static inline const TrackerGrammarRule *