Skip to content

Commit ef4b4ef

Browse files
[FIX] HTTP: prevent access errors when accessing propagated request context
1 parent fc7ef17 commit ef4b4ef

10 files changed

Lines changed: 22 additions & 11 deletions

File tree

‎basex-api/src/main/java/org/basex/http/HTTPConnection.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,8 @@ public void forward(final String location) throws IOException, ServletException
262262

263263
@Override
264264
public String clientAddress() {
265-
return getRemoteAddr() + ':' + request.getRemotePort();
265+
final String addr = getRemoteAddr();
266+
return addr != null ? addr + ':' + request.getRemotePort() : null;
266267
}
267268

268269
@Override

‎basex-api/src/main/java/org/basex/query/func/ApiFunc.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import org.basex.http.*;
88
import org.basex.query.*;
9+
import org.basex.query.value.item.*;
910

1011
/**
1112
* Request function.
@@ -35,4 +36,13 @@ public final RequestContext requestContext(final QueryContext qc) throws QueryEx
3536
public final HttpServletRequest request(final QueryContext qc) throws QueryException {
3637
return requestContext(qc).request;
3738
}
39+
40+
/**
41+
* Returns a non-null string.
42+
* @param string string (can be {@code null})
43+
* @return string
44+
*/
45+
public final Str toStr(final String string) {
46+
return Str.get(string != null ? string : "");
47+
}
3848
}

‎basex-api/src/main/java/org/basex/query/func/request/RequestAddress.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*/
1414
public final class RequestAddress extends ApiFunc {
1515
@Override
16-
public Item item(final QueryContext qc, final InputInfo ii) throws QueryException {
17-
return Str.get(request(qc).getLocalAddr());
16+
public Str item(final QueryContext qc, final InputInfo ii) throws QueryException {
17+
return toStr(request(qc).getLocalAddr());
1818
}
1919
}

‎basex-api/src/main/java/org/basex/query/func/request/RequestContextPath.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*/
1414
public final class RequestContextPath extends ApiFunc {
1515
@Override
16-
public Item item(final QueryContext qc, final InputInfo ii) throws QueryException {
17-
return Str.get(request(qc).getContextPath());
16+
public Str item(final QueryContext qc, final InputInfo ii) throws QueryException {
17+
return toStr(request(qc).getContextPath());
1818
}
1919
}

‎basex-api/src/main/java/org/basex/query/func/request/RequestHostname.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
public final class RequestHostname extends ApiFunc {
1515
@Override
1616
public Item item(final QueryContext qc, final InputInfo ii) throws QueryException {
17-
return Str.get(request(qc).getServerName());
17+
return toStr(request(qc).getServerName());
1818
}
1919
}

‎basex-api/src/main/java/org/basex/query/func/request/RequestMethod.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
public final class RequestMethod extends ApiFunc {
1515
@Override
1616
public Item item(final QueryContext qc, final InputInfo ii) throws QueryException {
17-
return Str.get(request(qc).getMethod());
17+
return toStr(request(qc).getMethod());
1818
}
1919
}

‎basex-api/src/main/java/org/basex/query/func/request/RequestPath.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
public final class RequestPath extends ApiFunc {
1515
@Override
1616
public Item item(final QueryContext qc, final InputInfo ii) throws QueryException {
17-
return Str.get(request(qc).getRequestURI());
17+
return toStr(request(qc).getRequestURI());
1818
}
1919
}

‎basex-api/src/main/java/org/basex/query/func/request/RequestRemoteAddress.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
public final class RequestRemoteAddress extends ApiFunc {
1515
@Override
1616
public Item item(final QueryContext qc, final InputInfo ii) throws QueryException {
17-
return Str.get(request(qc).getRemoteAddr());
17+
return toStr(request(qc).getRemoteAddr());
1818
}
1919
}

‎basex-api/src/main/java/org/basex/query/func/request/RequestRemoteHostname.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
public final class RequestRemoteHostname extends ApiFunc {
1515
@Override
1616
public Item item(final QueryContext qc, final InputInfo ii) throws QueryException {
17-
return Str.get(request(qc).getRemoteHost());
17+
return toStr(request(qc).getRemoteHost());
1818
}
1919
}

‎basex-api/src/main/java/org/basex/query/func/request/RequestScheme.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
public final class RequestScheme extends ApiFunc {
1515
@Override
1616
public Item item(final QueryContext qc, final InputInfo ii) throws QueryException {
17-
return Str.get(request(qc).getScheme());
17+
return toStr(request(qc).getScheme());
1818
}
1919
}

0 commit comments

Comments
 (0)