This is an automated email from the ASF dual-hosted git repository.

jerryshao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 243ea26019 [#11029] fix(web): Handle null URI in WebUIFilter (#11034)
243ea26019 is described below

commit 243ea26019682ec8d082c2493d986772ea0ae43d
Author: Qi Yu <[email protected]>
AuthorDate: Mon May 11 20:01:25 2026 +0800

    [#11029] fix(web): Handle null URI in WebUIFilter (#11034)
    
    ### What changes were proposed in this pull request?
    
    Add a null guard for `HttpServletRequest#getRequestURI()` in
    `WebUIFilter`. When the request URI is null, the filter now passes the
    request through the filter chain instead of trying to rewrite it to a
    Web UI static resource.
    
    This PR also adds a unit test covering the null URI path.
    
    ### Why are the changes needed?
    
    `WebUIFilter` previously called `path.lastIndexOf("/")` without checking
    whether `path` was null. If `getRequestURI()` returned null, the request
    failed with a `NullPointerException` and Jetty returned 500.
    
    Fix: #11029
    
    ### Does this PR introduce _any_ user-facing change?
    
    No API or configuration changes. Malformed or proxy-affected requests
    with a null request URI no longer fail in `WebUIFilter` with an NPE.
    
    ### How was this patch tested?
    
    ```bash
    ./gradlew :server:spotlessApply
    ./gradlew :server:test --tests 
org.apache.gravitino.server.web.ui.WebUIFilterTest -PskipITs
    ```
---
 .../org/apache/gravitino/server/web/ui/WebUIFilter.java   |  5 +++++
 .../apache/gravitino/server/web/ui/WebUIFilterTest.java   | 15 +++++++++++++++
 2 files changed, 20 insertions(+)

diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/ui/WebUIFilter.java 
b/server/src/main/java/org/apache/gravitino/server/web/ui/WebUIFilter.java
index 9a87fcccdd..82e67ab064 100644
--- a/server/src/main/java/org/apache/gravitino/server/web/ui/WebUIFilter.java
+++ b/server/src/main/java/org/apache/gravitino/server/web/ui/WebUIFilter.java
@@ -36,6 +36,11 @@ public class WebUIFilter implements Filter {
 
     HttpServletRequest httpRequest = (HttpServletRequest) request;
     String path = httpRequest.getRequestURI();
+    if (path == null) {
+      chain.doFilter(request, response);
+      return;
+    }
+
     String lastPathSegment = path.substring(path.lastIndexOf("/") + 1);
 
     if (path.equals("/") || path.equals("/ui") || path.equals("/ui/")) {
diff --git 
a/server/src/test/java/org/apache/gravitino/server/web/ui/WebUIFilterTest.java 
b/server/src/test/java/org/apache/gravitino/server/web/ui/WebUIFilterTest.java
index 6051023613..f4a094dd7f 100644
--- 
a/server/src/test/java/org/apache/gravitino/server/web/ui/WebUIFilterTest.java
+++ 
b/server/src/test/java/org/apache/gravitino/server/web/ui/WebUIFilterTest.java
@@ -34,6 +34,21 @@ import javax.servlet.http.HttpServletRequest;
 import org.junit.jupiter.api.Test;
 
 public class WebUIFilterTest {
+  @Test
+  public void testNullRequestUriPassesThroughFilterChain() throws 
ServletException, IOException {
+    WebUIFilter filter = new WebUIFilter();
+    HttpServletRequest request = mock(HttpServletRequest.class);
+    ServletResponse response = mock(ServletResponse.class);
+    FilterChain chain = mock(FilterChain.class);
+
+    when(request.getRequestURI()).thenReturn(null);
+
+    filter.doFilter(request, response, chain);
+
+    verify(chain).doFilter(request, response);
+    verify(request, never()).getRequestDispatcher(any());
+  }
+
   @Test
   public void testNestedDirectoryRequestForwardsToIndexHtml() throws 
ServletException, IOException {
     WebUIFilter filter = new WebUIFilter();

Reply via email to