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

linkinstar pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/answer.git


The following commit(s) were added to refs/heads/dev by this push:
     new 0777291e fix(ui): null pointer access if get branding fails
0777291e is described below

commit 0777291e80c804cb836b5059d7e0fad5f2b7fe79
Author: ferhat elmas <[email protected]>
AuthorDate: Wed Nov 26 01:00:42 2025 +0100

    fix(ui): null pointer access if get branding fails
    
    Signed-off-by: ferhat elmas <[email protected]>
---
 internal/router/ui.go      |  6 ++---
 internal/router/ui_test.go | 59 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/internal/router/ui.go b/internal/router/ui.go
index 0b5ee3f9..14f71f5f 100644
--- a/internal/router/ui.go
+++ b/internal/router/ui.go
@@ -22,7 +22,6 @@ package router
 import (
        "embed"
        "fmt"
-       "github.com/apache/answer/plugin"
        "io/fs"
        "net/http"
        "os"
@@ -31,6 +30,7 @@ import (
        "github.com/apache/answer/internal/controller"
        "github.com/apache/answer/internal/service/siteinfo_common"
        "github.com/apache/answer/pkg/htmltext"
+       "github.com/apache/answer/plugin"
        "github.com/apache/answer/ui"
        "github.com/gin-gonic/gin"
        "github.com/segmentfault/pacman/log"
@@ -111,10 +111,10 @@ func (a *UIRouter) Register(r *gin.Engine, baseURLPath 
string) {
                        if err != nil {
                                log.Error(err)
                        }
-                       if branding.Favicon != "" {
+                       if branding != nil && branding.Favicon != "" {
                                c.String(http.StatusOK, 
htmltext.GetPicByUrl(branding.Favicon))
                                return
-                       } else if branding.SquareIcon != "" {
+                       } else if branding != nil && branding.SquareIcon != "" {
                                c.String(http.StatusOK, 
htmltext.GetPicByUrl(branding.SquareIcon))
                                return
                        } else {
diff --git a/internal/router/ui_test.go b/internal/router/ui_test.go
new file mode 100644
index 00000000..64552933
--- /dev/null
+++ b/internal/router/ui_test.go
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package router
+
+import (
+       "errors"
+       "net/http"
+       "net/http/httptest"
+       "testing"
+
+       "github.com/apache/answer/internal/service/mock"
+       "github.com/gin-gonic/gin"
+       "github.com/stretchr/testify/assert"
+       "go.uber.org/mock/gomock"
+)
+
+func TestUIRouter_FaviconWithNilBranding(t *testing.T) {
+       ctrl := gomock.NewController(t)
+       defer ctrl.Finish()
+
+       mockSiteInfoService := mock.NewMockSiteInfoCommonService(ctrl)
+
+       // Simulate a database error
+       mockSiteInfoService.EXPECT().
+               GetSiteBranding(gomock.Any()).
+               Return(nil, errors.New("database connection failed"))
+
+       router := &UIRouter{
+               siteInfoService: mockSiteInfoService,
+       }
+
+       gin.SetMode(gin.TestMode)
+       r := gin.New()
+       router.Register(r, "")
+
+       req := httptest.NewRequest(http.MethodGet, "/favicon.ico", nil)
+       w := httptest.NewRecorder()
+
+       r.ServeHTTP(w, req)
+
+       assert.Equal(t, http.StatusOK, w.Code)
+}

Reply via email to