GitHub user twilmes opened a pull request:
https://github.com/apache/tinkerpop/pull/731
TINKERPOP-1650: PathRetractionStrategy makes Match steps unsolvable
This bug was a result of an unintentionally shared set between a MatchStep
and WhereStep's. This caused the `p` label to be incorrectly pulled into the
`matchStartLabels` for the following query:
`
g.V().hasLabel("person").as("p").match(__.as("a").out("created").as("sw"),
__.as("sw").has("lang", "java").as("java")).where("sw", neq("a")).select("p")`
As a result, when the match step was attempting to pick a
`startLabelsBundle`, it failed to grab one because the incoming traverser
already had the `p` label in its path. This fix added defensive copying to all
of the `setKeepLabels` calls to prevent the possibility of this unintentional
sharing of a mutable collection.
```
[INFO]
------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Apache TinkerPop ................................... SUCCESS [
3.238 s]
[INFO] Apache TinkerPop :: Gremlin Shaded ................. SUCCESS [
1.972 s]
[INFO] Apache TinkerPop :: Gremlin Core ................... SUCCESS [01:04
min]
[INFO] Apache TinkerPop :: Gremlin Test ................... SUCCESS [
9.145 s]
[INFO] Apache TinkerPop :: Gremlin Groovy ................. SUCCESS [04:00
min]
[INFO] Apache TinkerPop :: Gremlin Groovy Test ............ SUCCESS [
5.057 s]
[INFO] Apache TinkerPop :: TinkerGraph Gremlin ............ SUCCESS [02:58
min]
[INFO] Apache TinkerPop :: Gremlin Benchmark .............. SUCCESS [
3.874 s]
[INFO] Apache TinkerPop :: Gremlin Driver ................. SUCCESS [
9.796 s]
[INFO] Apache TinkerPop :: Neo4j Gremlin .................. SUCCESS [
2.134 s]
[INFO] Apache TinkerPop :: Gremlin Server ................. SUCCESS [
42.125 s]
[INFO] Apache TinkerPop :: Gremlin Python ................. SUCCESS [
6.630 s]
[INFO] Apache TinkerPop :: Gremlin.Net .................... SUCCESS [
2.892 s]
[INFO] Apache TinkerPop :: Gremlin.Net - Source ........... SUCCESS [
0.118 s]
[INFO] Apache TinkerPop :: Gremlin.Net - Tests ............ SUCCESS [
0.067 s]
[INFO] Apache TinkerPop :: Hadoop Gremlin ................. SUCCESS [03:12
min]
[INFO] Apache TinkerPop :: Spark Gremlin .................. SUCCESS [01:14
min]
[INFO] Apache TinkerPop :: Giraph Gremlin ................. SUCCESS [
7.819 s]
[INFO] Apache TinkerPop :: Gremlin Console ................ SUCCESS [
21.415 s]
[INFO] Apache TinkerPop :: Gremlin Archetype .............. SUCCESS [
0.045 s]
[INFO] Apache TinkerPop :: Archetype - TinkerGraph ........ SUCCESS [
4.934 s]
[INFO] Apache TinkerPop :: Archetype - Server ............. SUCCESS [
11.442 s]
[INFO] Apache TinkerPop :: Archetype - DSL ................ SUCCESS [
5.675 s]
[INFO]
------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 14:49 min
[INFO] Finished at: 2017-10-10T15:35:23-05:00
[INFO] Final Memory: 278M/6262M
[INFO]
------------------------------------------------------------------------
```
VOTE: +1
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/apache/tinkerpop TINKERPOP-1650
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/tinkerpop/pull/731.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #731
----
commit 73a982c7c13bc00893f34c65beec6419a56c76bc
Author: Ted Wilmes <[email protected]>
Date: 2017-10-10T18:46:13Z
TINKERPOP-1650
* Updated setKeepLabels calls to make defensive copies of their input to
avoid corruption.
* Added a new test to PathRetractionStrategyTest for WhereStep.
----
---