mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-30 02:02:43 +00:00 
			
		
		
		
	Fix potential panic in audit during header formatting (#22694)
This commit is contained in:
		| @@ -5,6 +5,7 @@ package audit | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"reflect" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
| @@ -150,9 +151,13 @@ func WithHMACAccessor(h bool) Option { | ||||
| } | ||||
|  | ||||
| // WithHeaderFormatter provides an Option to supply a HeaderFormatter. | ||||
| // If the HeaderFormatter interface supplied is nil (type or value), the option will not be applied. | ||||
| func WithHeaderFormatter(f HeaderFormatter) Option { | ||||
| 	return func(o *options) error { | ||||
| 		o.withHeaderFormatter = f | ||||
| 		if f != nil && !reflect.ValueOf(f).IsNil() { | ||||
| 			o.withHeaderFormatter = f | ||||
| 		} | ||||
|  | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
| package audit | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| @@ -361,6 +362,45 @@ func TestOptions_WithOmitTime(t *testing.T) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // TestOptions_WithHeaderFormatter exercises the WithHeaderFormatter Option to | ||||
| // ensure it applies the option as expected under various circumstances. | ||||
| func TestOptions_WithHeaderFormatter(t *testing.T) { | ||||
| 	tests := map[string]struct { | ||||
| 		Value                    HeaderFormatter | ||||
| 		ExpectedValue            HeaderFormatter | ||||
| 		ShouldLeaveUninitialized bool | ||||
| 	}{ | ||||
| 		"nil": { | ||||
| 			Value:         nil, | ||||
| 			ExpectedValue: nil, | ||||
| 		}, | ||||
| 		"unassigned-interface": { | ||||
| 			ShouldLeaveUninitialized: true, | ||||
| 		}, | ||||
| 		"happy-path": { | ||||
| 			Value:         &testHeaderFormatter{}, | ||||
| 			ExpectedValue: &testHeaderFormatter{}, | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| 	for name, tc := range tests { | ||||
| 		name := name | ||||
| 		tc := tc | ||||
| 		t.Run(name, func(t *testing.T) { | ||||
| 			t.Parallel() | ||||
| 			opts := &options{} | ||||
| 			var f HeaderFormatter | ||||
| 			if !tc.ShouldLeaveUninitialized { | ||||
| 				f = tc.Value | ||||
| 			} | ||||
| 			applyOption := WithHeaderFormatter(f) | ||||
| 			err := applyOption(opts) | ||||
| 			require.NoError(t, err) | ||||
| 			require.Equal(t, tc.ExpectedValue, opts.withHeaderFormatter) | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // TestOptions_Default exercises getDefaultOptions to assert the default values. | ||||
| func TestOptions_Default(t *testing.T) { | ||||
| 	opts := getDefaultOptions() | ||||
| @@ -485,3 +525,12 @@ func TestOptions_Opts(t *testing.T) { | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // testHeaderFormatter is a stub to prevent the need to import the vault package | ||||
| // to bring in vault.AuditedHeadersConfig for testing. | ||||
| type testHeaderFormatter struct{} | ||||
|  | ||||
| // ApplyConfig satisfied the HeaderFormatter interface for testing. | ||||
| func (f *testHeaderFormatter) ApplyConfig(ctx context.Context, headers map[string][]string, salter Salter) (result map[string][]string, retErr error) { | ||||
| 	return nil, nil | ||||
| } | ||||
|   | ||||
							
								
								
									
										3
									
								
								changelog/22694.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								changelog/22694.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| ```release-note:bug | ||||
| audit: Prevent panic due to nil pointer receiver for audit header formatting. | ||||
| ``` | ||||
		Reference in New Issue
	
	Block a user
	 Peter Wilson
					Peter Wilson