Skip to content
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

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

Merged
merged 1 commit into from
Jun 27, 2021
Merged
Show file tree
Hide file tree
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
Expand Up @@ -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.
Expand All @@ -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.
Expand All @@ -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.
Expand All @@ -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.
Expand All @@ -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.
Expand Down
15 changes: 5 additions & 10 deletions models/repo_unit.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand All @@ -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.
Expand All @@ -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.
Expand All @@ -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.
Expand Down