Skip to content

Handle misencoding of login_source cfg in mssql (#16268) #16275

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 27, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 16 additions & 10 deletions models/login_source.go
Original file line number Diff line number Diff line change
@@ -69,15 +69,25 @@ var (
_ convert.Conversion = &SSPIConfig{}
)

// jsonUnmarshalIgnoreErroneousBOM - due to a bug in xorm (see https://gitea.com/xorm/xorm/pulls/1957) - it's
// possible that a Blob may gain an unwanted prefix of 0xff 0xfe.
func jsonUnmarshalIgnoreErroneousBOM(bs []byte, v interface{}) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
err := json.Unmarshal(bs, &v)
if err != nil && len(bs) > 2 && bs[0] == 0xff && bs[1] == 0xfe {
err = json.Unmarshal(bs[2:], &v)
}
return err
}

// LDAPConfig holds configuration for LDAP login source.
type LDAPConfig struct {
*ldap.Source
}

// FromDB fills up a LDAPConfig from serialized format.
func (cfg *LDAPConfig) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, &cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, &cfg)
}

// ToDB exports a LDAPConfig to a serialized format.
@@ -104,8 +114,7 @@ type SMTPConfig struct {

// FromDB fills up an SMTPConfig from serialized format.
func (cfg *SMTPConfig) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, cfg)
}

// ToDB exports an SMTPConfig to a serialized format.
@@ -122,8 +131,7 @@ type PAMConfig struct {

// FromDB fills up a PAMConfig from serialized format.
func (cfg *PAMConfig) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, &cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, cfg)
}

// ToDB exports a PAMConfig to a serialized format.
@@ -144,8 +152,7 @@ type OAuth2Config struct {

// FromDB fills up an OAuth2Config from serialized format.
func (cfg *OAuth2Config) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, cfg)
}

// ToDB exports an SMTPConfig to a serialized format.
@@ -165,8 +172,7 @@ type SSPIConfig struct {

// FromDB fills up an SSPIConfig from serialized format.
func (cfg *SSPIConfig) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, cfg)
}

// ToDB exports an SSPIConfig to a serialized format.
15 changes: 5 additions & 10 deletions models/repo_unit.go
Original file line number Diff line number Diff line change
@@ -28,8 +28,7 @@ type UnitConfig struct{}

// FromDB fills up a UnitConfig from serialized format.
func (cfg *UnitConfig) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, &cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, &cfg)
}

// ToDB exports a UnitConfig to a serialized format.
@@ -45,8 +44,7 @@ type ExternalWikiConfig struct {

// FromDB fills up a ExternalWikiConfig from serialized format.
func (cfg *ExternalWikiConfig) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, &cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, &cfg)
}

// ToDB exports a ExternalWikiConfig to a serialized format.
@@ -64,8 +62,7 @@ type ExternalTrackerConfig struct {

// FromDB fills up a ExternalTrackerConfig from serialized format.
func (cfg *ExternalTrackerConfig) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, &cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, &cfg)
}

// ToDB exports a ExternalTrackerConfig to a serialized format.
@@ -83,8 +80,7 @@ type IssuesConfig struct {

// FromDB fills up a IssuesConfig from serialized format.
func (cfg *IssuesConfig) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, &cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, &cfg)
}

// ToDB exports a IssuesConfig to a serialized format.
@@ -106,8 +102,7 @@ type PullRequestsConfig struct {

// FromDB fills up a PullRequestsConfig from serialized format.
func (cfg *PullRequestsConfig) FromDB(bs []byte) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
return json.Unmarshal(bs, &cfg)
return jsonUnmarshalIgnoreErroneousBOM(bs, &cfg)
}

// ToDB exports a PullRequestsConfig to a serialized format.