Skip to content

Commit c0a9f31

Browse files
ferhatelmasLinkinStars
authored andcommitted
fix(ui): null pointer access if get branding fails
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
1 parent f86e981 commit c0a9f31

File tree

2 files changed

+62
-3
lines changed

2 files changed

+62
-3
lines changed

internal/router/ui.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ package router
2222
import (
2323
"embed"
2424
"fmt"
25-
"github.com/apache/answer/plugin"
2625
"io/fs"
2726
"net/http"
2827
"os"
@@ -31,6 +30,7 @@ import (
3130
"github.com/apache/answer/internal/controller"
3231
"github.com/apache/answer/internal/service/siteinfo_common"
3332
"github.com/apache/answer/pkg/htmltext"
33+
"github.com/apache/answer/plugin"
3434
"github.com/apache/answer/ui"
3535
"github.com/gin-gonic/gin"
3636
"github.com/segmentfault/pacman/log"
@@ -111,10 +111,10 @@ func (a *UIRouter) Register(r *gin.Engine, baseURLPath string) {
111111
if err != nil {
112112
log.Error(err)
113113
}
114-
if branding.Favicon != "" {
114+
if branding != nil && branding.Favicon != "" {
115115
c.String(http.StatusOK, htmltext.GetPicByUrl(branding.Favicon))
116116
return
117-
} else if branding.SquareIcon != "" {
117+
} else if branding != nil && branding.SquareIcon != "" {
118118
c.String(http.StatusOK, htmltext.GetPicByUrl(branding.SquareIcon))
119119
return
120120
} else {

internal/router/ui_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package router
21+
22+
import (
23+
"errors"
24+
"net/http"
25+
"net/http/httptest"
26+
"testing"
27+
28+
"github.com/apache/answer/internal/service/mock"
29+
"github.com/gin-gonic/gin"
30+
"github.com/stretchr/testify/assert"
31+
"go.uber.org/mock/gomock"
32+
)
33+
34+
func TestUIRouter_FaviconWithNilBranding(t *testing.T) {
35+
ctrl := gomock.NewController(t)
36+
defer ctrl.Finish()
37+
38+
mockSiteInfoService := mock.NewMockSiteInfoCommonService(ctrl)
39+
40+
// Simulate a database error
41+
mockSiteInfoService.EXPECT().
42+
GetSiteBranding(gomock.Any()).
43+
Return(nil, errors.New("database connection failed"))
44+
45+
router := &UIRouter{
46+
siteInfoService: mockSiteInfoService,
47+
}
48+
49+
gin.SetMode(gin.TestMode)
50+
r := gin.New()
51+
router.Register(r, "")
52+
53+
req := httptest.NewRequest(http.MethodGet, "/favicon.ico", nil)
54+
w := httptest.NewRecorder()
55+
56+
r.ServeHTTP(w, req)
57+
58+
assert.Equal(t, http.StatusOK, w.Code)
59+
}

0 commit comments

Comments
 (0)