@@ -27,7 +27,7 @@ const MaxLogValueLength = 1024
2727// logger *slog.Logger
2828// }
2929//
30- // func (s *SlogAdapter) Debug(msg string, keysAndValues ...interface{} ) {
30+ // func (s *SlogAdapter) Debug(msg string, keysAndValues ...any ) {
3131// s.logger.Debug(msg, keysAndValues...)
3232// }
3333// // ... implement other methods
@@ -37,10 +37,10 @@ const MaxLogValueLength = 1024
3737// netconf.Password("secret"),
3838// netconf.WithLogger(&SlogAdapter{logger: slog.Default()}))
3939type Logger interface {
40- Debug (msg string , keysAndValues ... interface {} )
41- Info (msg string , keysAndValues ... interface {} )
42- Warn (msg string , keysAndValues ... interface {} )
43- Error (msg string , keysAndValues ... interface {} )
40+ Debug (msg string , keysAndValues ... any )
41+ Info (msg string , keysAndValues ... any )
42+ Warn (msg string , keysAndValues ... any )
43+ Error (msg string , keysAndValues ... any )
4444}
4545
4646// LogLevel represents the severity threshold for logging
@@ -102,28 +102,28 @@ func NewDefaultLogger(level LogLevel) *DefaultLogger {
102102}
103103
104104// Debug logs a debug message with structured key-value pairs
105- func (l * DefaultLogger ) Debug (msg string , keysAndValues ... interface {} ) {
105+ func (l * DefaultLogger ) Debug (msg string , keysAndValues ... any ) {
106106 if l .level <= LogLevelDebug {
107107 l .log ("DEBUG" , msg , keysAndValues ... )
108108 }
109109}
110110
111111// Info logs an informational message with structured key-value pairs
112- func (l * DefaultLogger ) Info (msg string , keysAndValues ... interface {} ) {
112+ func (l * DefaultLogger ) Info (msg string , keysAndValues ... any ) {
113113 if l .level <= LogLevelInfo {
114114 l .log ("INFO" , msg , keysAndValues ... )
115115 }
116116}
117117
118118// Warn logs a warning message with structured key-value pairs
119- func (l * DefaultLogger ) Warn (msg string , keysAndValues ... interface {} ) {
119+ func (l * DefaultLogger ) Warn (msg string , keysAndValues ... any ) {
120120 if l .level <= LogLevelWarn {
121121 l .log ("WARN" , msg , keysAndValues ... )
122122 }
123123}
124124
125125// Error logs an error message with structured key-value pairs
126- func (l * DefaultLogger ) Error (msg string , keysAndValues ... interface {} ) {
126+ func (l * DefaultLogger ) Error (msg string , keysAndValues ... any ) {
127127 if l .level <= LogLevelError {
128128 l .log ("ERROR" , msg , keysAndValues ... )
129129 }
@@ -143,7 +143,7 @@ func (l *DefaultLogger) Error(msg string, keysAndValues ...interface{}) {
143143// Output: "user .[ERROR].Fake.attack.message"
144144//
145145// Returns the sanitized string value.
146- func sanitizeLogValue (val interface {} ) string {
146+ func sanitizeLogValue (val any ) string {
147147 str := fmt .Sprintf ("%v" , val )
148148
149149 // Truncate long values to prevent log file DoS
@@ -164,6 +164,11 @@ func sanitizeLogValue(val interface{}) string {
164164 decoded , size := utf8 .DecodeRuneInString (str [i :])
165165 if decoded == utf8 .RuneError {
166166 builder .WriteRune ('.' )
167+ // CRITICAL: Must advance index even on error to prevent infinite loop
168+ if size == 0 {
169+ size = 1 // Ensure forward progress on malformed UTF-8
170+ }
171+ i += size - 1
167172 continue
168173 }
169174
@@ -214,7 +219,7 @@ func sanitizeLogValue(val interface{}) string {
214219// All key-value pairs are sanitized to prevent log injection attacks and
215220// enforce size limits. The message string is NOT sanitized as it comes from
216221// trusted sources (the library code itself).
217- func (l * DefaultLogger ) log (level , msg string , keysAndValues ... interface {} ) {
222+ func (l * DefaultLogger ) log (level , msg string , keysAndValues ... any ) {
218223 if l .level > logLevelFromString (level ) {
219224 return
220225 }
@@ -284,13 +289,13 @@ func logLevelFromString(level string) LogLevel {
284289type NoOpLogger struct {}
285290
286291// Debug discards the log message
287- func (n * NoOpLogger ) Debug (_ string , _ ... interface {} ) {}
292+ func (n * NoOpLogger ) Debug (_ string , _ ... any ) {}
288293
289294// Info discards the log message
290- func (n * NoOpLogger ) Info (_ string , _ ... interface {} ) {}
295+ func (n * NoOpLogger ) Info (_ string , _ ... any ) {}
291296
292297// Warn discards the log message
293- func (n * NoOpLogger ) Warn (_ string , _ ... interface {} ) {}
298+ func (n * NoOpLogger ) Warn (_ string , _ ... any ) {}
294299
295300// Error discards the log message
296- func (n * NoOpLogger ) Error (_ string , _ ... interface {} ) {}
301+ func (n * NoOpLogger ) Error (_ string , _ ... any ) {}
0 commit comments