refactor(audio/validation): improve frame data validation with specific error messages

Split generic frame data validation error into specific cases for empty and oversized frames to provide better error context. The optimized validation maintains performance while improving debuggability.
This commit is contained in:
Alex P 2025-08-27 23:54:40 +00:00
parent ece36ce5fd
commit 3efe2f2a1d
1 changed files with 8 additions and 4 deletions

View File

@ -14,6 +14,8 @@ var (
ErrInvalidAudioQuality = errors.New("invalid audio quality level") ErrInvalidAudioQuality = errors.New("invalid audio quality level")
ErrInvalidFrameSize = errors.New("invalid frame size") ErrInvalidFrameSize = errors.New("invalid frame size")
ErrInvalidFrameData = errors.New("invalid frame data") ErrInvalidFrameData = errors.New("invalid frame data")
ErrFrameDataEmpty = errors.New("invalid frame data: frame data is empty")
ErrFrameDataTooLarge = errors.New("invalid frame data: exceeds maximum")
ErrInvalidBufferSize = errors.New("invalid buffer size") ErrInvalidBufferSize = errors.New("invalid buffer size")
ErrInvalidPriority = errors.New("invalid priority value") ErrInvalidPriority = errors.New("invalid priority value")
ErrInvalidLatency = errors.New("invalid latency value") ErrInvalidLatency = errors.New("invalid latency value")
@ -325,11 +327,13 @@ func InitValidationCache() {
// //
//go:inline //go:inline
func ValidateAudioFrame(data []byte) error { func ValidateAudioFrame(data []byte) error {
// Single optimized check: empty data OR exceeds cached maximum // Optimized validation with pre-allocated error messages for minimal overhead
// This branch prediction friendly pattern minimizes CPU pipeline stalls
dataLen := len(data) dataLen := len(data)
if dataLen == 0 || dataLen > cachedMaxFrameSize { if dataLen == 0 {
return ErrInvalidFrameData return ErrFrameDataEmpty
}
if dataLen > cachedMaxFrameSize {
return ErrFrameDataTooLarge
} }
return nil return nil
} }