Skip to content

Commit 12e1924

Browse files
committed
[bugfix] Avoid an NPE when disposing Binary Values under some circumstances.
Regression introduced in 1e91318
1 parent 2b0738c commit 12e1924

15 files changed

+31
-19
lines changed

exist-core/src/main/java/org/exist/dom/memtree/NodeImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.xml.sax.SAXException;
4343
import org.xml.sax.ext.LexicalHandler;
4444

45+
import javax.annotation.Nullable;
4546
import javax.xml.XMLConstants;
4647
import java.util.Iterator;
4748
import java.util.Properties;
@@ -762,7 +763,7 @@ public boolean contains(final Item item) {
762763
}
763764

764765
@Override
765-
public void destroy(final XQueryContext context, final Sequence contextSequence) {
766+
public void destroy(final XQueryContext context, @Nullable final Sequence contextSequence) {
766767
}
767768

768769

exist-core/src/main/java/org/exist/dom/persistent/NodeProxy.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.xml.sax.SAXException;
4646
import org.xml.sax.ext.LexicalHandler;
4747

48+
import javax.annotation.Nullable;
4849
import javax.xml.stream.XMLStreamException;
4950
import javax.xml.stream.XMLStreamReader;
5051
import java.io.IOException;
@@ -987,7 +988,7 @@ public boolean contains(final Item item) {
987988
}
988989

989990
@Override
990-
public void destroy(final XQueryContext context, final Sequence contextSequence) {
991+
public void destroy(final XQueryContext context, @Nullable final Sequence contextSequence) {
991992
// Nothing to do
992993
}
993994

exist-core/src/main/java/org/exist/xquery/DeferredFunctionCall.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.exist.xquery.value.SequenceIterator;
3636
import org.exist.xquery.value.Type;
3737

38+
import javax.annotation.Nullable;
3839
import java.util.Iterator;
3940

4041
public abstract class DeferredFunctionCall implements Sequence {
@@ -309,7 +310,7 @@ public boolean isCacheable() {
309310
}
310311

311312
@Override
312-
public void destroy(XQueryContext context, Sequence contextSequence) {
313+
public void destroy(final XQueryContext context, @Nullable final Sequence contextSequence) {
313314
// nothing to do
314315
}
315316
}

exist-core/src/main/java/org/exist/xquery/ModuleContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ public void popLocalVariables(final LocalVariable var) {
311311
}
312312

313313
@Override
314-
public void popLocalVariables(final LocalVariable var, final Sequence resultSequence) {
314+
public void popLocalVariables(final LocalVariable var, @Nullable final Sequence resultSequence) {
315315
parentContext.popLocalVariables(var, resultSequence);
316316
}
317317

exist-core/src/main/java/org/exist/xquery/VariableImpl.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import org.w3c.dom.Document;
3131
import org.w3c.dom.Element;
3232

33+
import javax.annotation.Nullable;
34+
3335
/**
3436
* An XQuery/XPath variable, consisting of a QName and a value.
3537
*
@@ -164,9 +166,10 @@ public void setIsInitialized(boolean initialized) {
164166
this.initialized = initialized;
165167
}
166168

167-
public void destroy(XQueryContext context, Sequence contextSequence) {
168-
if (value != null)
169-
{value.destroy(context, contextSequence);}
169+
public void destroy(final XQueryContext context, @Nullable final Sequence contextSequence) {
170+
if (value != null) {
171+
value.destroy(context, contextSequence);
172+
}
170173
}
171174

172175
@Override

exist-core/src/main/java/org/exist/xquery/XQueryContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2354,7 +2354,7 @@ public void popLocalVariables(@Nullable final LocalVariable var) {
23542354
* @param var only clear variables after this variable, or null
23552355
* @param resultSeq the result sequence
23562356
*/
2357-
public void popLocalVariables(@Nullable final LocalVariable var, final Sequence resultSeq) {
2357+
public void popLocalVariables(@Nullable final LocalVariable var, @Nullable final Sequence resultSeq) {
23582358
if (var != null) {
23592359
// clear all variables registered after var. they should be out of scope.
23602360
LocalVariable outOfScope = var.after;

exist-core/src/main/java/org/exist/xquery/value/AbstractSequence.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.exist.xquery.XPathException;
3333
import org.exist.xquery.XQueryContext;
3434

35+
import javax.annotation.Nullable;
3536
import java.lang.reflect.Array;
3637
import java.util.ArrayList;
3738
import java.util.Iterator;
@@ -287,7 +288,7 @@ public boolean hasChanged(final int previousState) {
287288
}
288289

289290
@Override
290-
public void destroy(final XQueryContext context, final Sequence contextSequence) {
291+
public void destroy(final XQueryContext context, @Nullable final Sequence contextSequence) {
291292
// do nothing by default
292293
}
293294
}

exist-core/src/main/java/org/exist/xquery/value/ArrayListValueSequence.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ public boolean contains(final Item item) {
255255
}
256256

257257
@Override
258-
public void destroy(final XQueryContext context, final Sequence contextSequence) {
258+
public void destroy(final XQueryContext context, @Nullable final Sequence contextSequence) {
259259
for (final Item value : values) {
260260
value.destroy(context, contextSequence);
261261
}

exist-core/src/main/java/org/exist/xquery/value/AtomicValue.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.xml.sax.ContentHandler;
4343
import org.xml.sax.SAXException;
4444

45+
import javax.annotation.Nullable;
4546
import java.util.Iterator;
4647
import java.util.Properties;
4748

@@ -362,7 +363,7 @@ public boolean contains(final Item item) {
362363
}
363364

364365
@Override
365-
public void destroy(final XQueryContext context, final Sequence contextSequence) {
366+
public void destroy(final XQueryContext context, @Nullable final Sequence contextSequence) {
366367
// nothing to be done by default
367368
}
368369

exist-core/src/main/java/org/exist/xquery/value/BinaryValueFromFile.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.exist.xquery.XPathException;
2727
import org.exist.xquery.XQueryContext;
2828

29+
import javax.annotation.Nullable;
2930
import java.io.InputStream;
3031
import java.io.IOException;
3132
import java.io.OutputStream;
@@ -144,9 +145,9 @@ public Object toJavaObject() throws XPathException {
144145
}
145146

146147
@Override
147-
public void destroy(final XQueryContext context, final Sequence contextSequence) {
148+
public void destroy(final XQueryContext context, @Nullable final Sequence contextSequence) {
148149
// do not close if this object is part of the contextSequence
149-
if (contextSequence == this || contextSequence.containsReference(this)) {
150+
if (contextSequence != null && (contextSequence == this || contextSequence.containsReference(this))) {
150151
return;
151152
}
152153
try {

0 commit comments

Comments
 (0)