···523523524524.PHONY: security-check
525525security-check:
526526- go run $(GOVULNCHECK_PACKAGE) ./...
526526+ go run $(GOVULNCHECK_PACKAGE) -show color ./...
527527528528###
529529# Development and testing targets
+2-1
modules/indexer/code/bleve/bleve.go
···179179 return err
180180 } else if !typesniffer.DetectContentType(fileContents).IsText() {
181181 // FIXME: UTF-16 files will probably fail here
182182- return nil
182182+ // Even if the file is not recognized as a "text file", we could still put its name into the indexers to make the filename become searchable, while leave the content to empty.
183183+ fileContents = nil
183184 }
184185185186 if _, err = batchReader.Discard(1); err != nil {
+11
modules/optional/option.go
···3344package optional
5566+import "strconv"
77+68type Option[T any] []T
79810func None[T any]() Option[T] {
···4345 }
4446 return v
4547}
4848+4949+// ParseBool get the corresponding optional.Option[bool] of a string using strconv.ParseBool
5050+func ParseBool(s string) Option[bool] {
5151+ v, e := strconv.ParseBool(s)
5252+ if e != nil {
5353+ return None[bool]()
5454+ }
5555+ return Some(v)
5656+}
···1212 "time"
13131414 "forgejo.org/modules/log"
1515+ "forgejo.org/modules/optional"
1516 "forgejo.org/modules/user"
1616- "forgejo.org/modules/util"
1717)
18181919var ForgejoVersion = "1.0.0"
···162162 // The following is a purposefully undocumented option. Please do not run Forgejo as root. It will only cause future headaches.
163163 // Please don't use root as a bandaid to "fix" something that is broken, instead the broken thing should instead be fixed properly.
164164 unsafeAllowRunAsRoot := ConfigSectionKeyBool(rootSec, "I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")
165165- unsafeAllowRunAsRoot = unsafeAllowRunAsRoot || util.OptionalBoolParse(os.Getenv("GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")).Value()
165165+ unsafeAllowRunAsRoot = unsafeAllowRunAsRoot || optional.ParseBool(os.Getenv("GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")).Value()
166166 RunMode = os.Getenv("GITEA_RUN_MODE")
167167 if RunMode == "" {
168168 RunMode = rootSec.Key("RUN_MODE").MustString("prod")
-11
modules/util/util.go
···1414 "strconv"
1515 "strings"
16161717- "forgejo.org/modules/optional"
1818-1917 "golang.org/x/crypto/ssh"
2018 "golang.org/x/text/cases"
2119 "golang.org/x/text/language"
2220)
2323-2424-// OptionalBoolParse get the corresponding optional.Option[bool] of a string using strconv.ParseBool
2525-func OptionalBoolParse(s string) optional.Option[bool] {
2626- v, e := strconv.ParseBool(s)
2727- if e != nil {
2828- return optional.None[bool]()
2929- }
3030- return optional.Some(v)
3131-}
32213322// IsEmptyString checks if the provided string is empty
3423func IsEmptyString(s string) bool {
-14
modules/util/util_test.go
···1111 "strings"
1212 "testing"
13131414- "forgejo.org/modules/optional"
1514 "forgejo.org/modules/test"
1615 "forgejo.org/modules/util"
1716···179178 require.NoError(t, err)
180179181180 assert.NotEqual(t, bytes3, bytes4)
182182-}
183183-184184-func TestOptionalBoolParse(t *testing.T) {
185185- assert.Equal(t, optional.None[bool](), util.OptionalBoolParse(""))
186186- assert.Equal(t, optional.None[bool](), util.OptionalBoolParse("x"))
187187-188188- assert.Equal(t, optional.Some(false), util.OptionalBoolParse("0"))
189189- assert.Equal(t, optional.Some(false), util.OptionalBoolParse("f"))
190190- assert.Equal(t, optional.Some(false), util.OptionalBoolParse("False"))
191191-192192- assert.Equal(t, optional.Some(true), util.OptionalBoolParse("1"))
193193- assert.Equal(t, optional.Some(true), util.OptionalBoolParse("t"))
194194- assert.Equal(t, optional.Some(true), util.OptionalBoolParse("True"))
195181}
196182197183// Test case for any function which accepts and returns a single string.