aboutsummaryrefslogtreecommitdiffstats
path: root/bsfs/triple_store
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-03-02 15:29:12 +0100
committerMatthias Baumgartner <dev@igsor.net>2023-03-02 15:29:12 +0100
commitb66ed641d5cbb4cb83f4a571223e4d65d80ed05c (patch)
treecf52e778f611e7520bd92b99df22b6bf69e552ec /bsfs/triple_store
parent2e07f33314c238e42bfadc5f39805f93ffbc622e (diff)
downloadbsfs-b66ed641d5cbb4cb83f4a571223e4d65d80ed05c.tar.gz
bsfs-b66ed641d5cbb4cb83f4a571223e4d65d80ed05c.tar.bz2
bsfs-b66ed641d5cbb4cb83f4a571223e4d65d80ed05c.zip
check non-serializable URIs in the sparql store
Diffstat (limited to 'bsfs/triple_store')
-rw-r--r--bsfs/triple_store/sparql/parse_filter.py2
-rw-r--r--bsfs/triple_store/sparql/sparql.py6
2 files changed, 8 insertions, 0 deletions
diff --git a/bsfs/triple_store/sparql/parse_filter.py b/bsfs/triple_store/sparql/parse_filter.py
index ff22de2..8959b2c 100644
--- a/bsfs/triple_store/sparql/parse_filter.py
+++ b/bsfs/triple_store/sparql/parse_filter.py
@@ -267,6 +267,8 @@ class Filter():
"""
if not isinstance(node_type, bsc.Node):
raise errors.BackendError(f'expected Node, found {node_type}')
+ if not rdflib.term._is_valid_uri(node.value): # pylint: disable=protected-access
+ raise errors.BackendError(f'<{node.value}> is not a serializable uri')
return f'VALUES {head} {{ <{node.value}> }}'
def _equals(self, node_type: bsc.Vertex, node: ast.filter.Equals, head: str) -> str:
diff --git a/bsfs/triple_store/sparql/sparql.py b/bsfs/triple_store/sparql/sparql.py
index 5890bcc..bd98f46 100644
--- a/bsfs/triple_store/sparql/sparql.py
+++ b/bsfs/triple_store/sparql/sparql.py
@@ -284,6 +284,9 @@ class SparqlStore(base.TripleStoreBase):
raise errors.ConsistencyError(f'{node_type} is not defined in the schema')
# check and create guids
for guid in guids:
+ # check convert to rdflib.URIRef
+ if not rdflib.term._is_valid_uri(guid): # pylint: disable=protected-access
+ raise ValueError(guids)
subject = rdflib.URIRef(guid)
# check node existence
if (subject, rdflib.RDF.type, None) in self._graph:
@@ -324,6 +327,9 @@ class SparqlStore(base.TripleStoreBase):
# check guids
# FIXME: Fail or skip inexistent nodes?
guids = set(guids)
+ invalid = {guid for guid in guids if not rdflib.term._is_valid_uri(guid)} # pylint: disable=protected-access
+ if len(invalid) > 0:
+ raise ValueError(invalid)
inconsistent = {guid for guid in guids if not self._has_type(guid, node_type)}
if len(inconsistent) > 0:
raise errors.InstanceError(inconsistent)