From e6b2ab146dbc2bb870e9d0e898658614ff3f8916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Thu, 30 May 2024 11:25:38 +0200 Subject: [PATCH] GH-4993 check if null before using the removedStatementTarget --- .../sail/shacl/ast/targets/RSXTargetShape.java | 3 ++- .../shacl/ast/targets/TargetChainRetriever.java | 4 ++-- .../complexTargetShape2/valid/case4/query1.rq | 15 +++++++++++++++ .../complexTargetShape2/valid/case4/query2.rq | 10 ++++++++++ .../complexTargetShape2/valid/case4/report.ttl | 12 ++++++++++++ .../complexTargetShape2/valid/case5/query1.rq | 15 +++++++++++++++ .../complexTargetShape2/valid/case5/query2.rq | 11 +++++++++++ .../complexTargetShape2/valid/case5/report.ttl | 12 ++++++++++++ 8 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/query1.rq create mode 100644 core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/query2.rq create mode 100644 core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/report.ttl create mode 100644 core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/query1.rq create mode 100644 core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/query2.rq create mode 100644 core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/report.ttl diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/RSXTargetShape.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/RSXTargetShape.java index 1aa16e99456..77c6e62538c 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/RSXTargetShape.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/RSXTargetShape.java @@ -92,7 +92,8 @@ private PlanNode getAddedRemovedInner(ConnectionsGroup connectionsGroup, Resourc dataGraph, statementMatchers, statementMatchers, - null, sparqlFragment, + null, + sparqlFragment, vars, scope, false), false); diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/TargetChainRetriever.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/TargetChainRetriever.java index 24bc6e5bfb2..6d723115d9d 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/TargetChainRetriever.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/TargetChainRetriever.java @@ -204,7 +204,7 @@ public void calculateNextStatementMatcher() { this.currentVarNames = currentStatementMatcher.getVarNames(varNames, removedStatement, varNamesInQueryFragment); - assert !currentVarNames.isEmpty(); + assert !currentVarNames.isEmpty() : "currentVarNames is empty!"; statements = connection.getStatements( currentStatementMatcher.getSubjectValue(), @@ -289,7 +289,7 @@ private List readStatementsInBulk(Set varNames) { Statement next = statements.next(); Stream rootStatements = Stream .of(new EffectiveTarget.StatementsAndMatcher(List.of(next), currentStatementMatcher)); - if (removedStatement) { + if (removedStatement && removedStatementTarget != null) { Stream root = removedStatementTarget.getRoot( connectionsGroup, dataGraph, currentStatementMatcher, diff --git a/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/query1.rq b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/query1.rq new file mode 100644 index 00000000000..5a7bbc73f21 --- /dev/null +++ b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/query1.rq @@ -0,0 +1,15 @@ +PREFIX ex: +PREFIX owl: +PREFIX rdf: +PREFIX rdfs: +PREFIX sh: +PREFIX xsd: + +INSERT DATA { +ex:validPerson1 a ex:Person ; + rdfs:label "Jennifer"; + ex:knows ex:peter. + +ex:peter a ex:Person. + +} diff --git a/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/query2.rq b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/query2.rq new file mode 100644 index 00000000000..891ef69d883 --- /dev/null +++ b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/query2.rq @@ -0,0 +1,10 @@ +PREFIX ex: +PREFIX owl: +PREFIX rdf: +PREFIX rdfs: +PREFIX sh: +PREFIX xsd: + +DELETE DATA { +ex:validPerson1 a ex:Person . +} diff --git a/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/report.ttl b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/report.ttl new file mode 100644 index 00000000000..c0518dc88b5 --- /dev/null +++ b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case4/report.ttl @@ -0,0 +1,12 @@ +@prefix ex: . +@prefix foaf: . +@prefix xsd: . +@prefix sh: . +@prefix rdf: . +@prefix rdfs: . +@prefix rsx: . +@prefix rdf4j: . + +[] a sh:ValidationReport; + rdf4j:truncated false; + sh:conforms true . diff --git a/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/query1.rq b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/query1.rq new file mode 100644 index 00000000000..5a7bbc73f21 --- /dev/null +++ b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/query1.rq @@ -0,0 +1,15 @@ +PREFIX ex: +PREFIX owl: +PREFIX rdf: +PREFIX rdfs: +PREFIX sh: +PREFIX xsd: + +INSERT DATA { +ex:validPerson1 a ex:Person ; + rdfs:label "Jennifer"; + ex:knows ex:peter. + +ex:peter a ex:Person. + +} diff --git a/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/query2.rq b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/query2.rq new file mode 100644 index 00000000000..35b8cdee1a5 --- /dev/null +++ b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/query2.rq @@ -0,0 +1,11 @@ +PREFIX ex: +PREFIX owl: +PREFIX rdf: +PREFIX rdfs: +PREFIX sh: +PREFIX xsd: + +DELETE DATA { + ex:validPerson1 rdfs:label "Jennifer" . + ex:peter a ex:Person. +} diff --git a/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/report.ttl b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/report.ttl new file mode 100644 index 00000000000..c0518dc88b5 --- /dev/null +++ b/core/sail/shacl/src/test/resources/test-cases/class/complexTargetShape2/valid/case5/report.ttl @@ -0,0 +1,12 @@ +@prefix ex: . +@prefix foaf: . +@prefix xsd: . +@prefix sh: . +@prefix rdf: . +@prefix rdfs: . +@prefix rsx: . +@prefix rdf4j: . + +[] a sh:ValidationReport; + rdf4j:truncated false; + sh:conforms true .