✨ Enhance aviation parser with security fixes and comprehensive refactoring
This commit implements a complete refactoring of the ICAO aviation parser, addressing 15 identified issues across security, performance, code quality, and documentation. Security Enhancements (P0 - Critical): - Add input size validation (max 1800 chars per AFTN standard) - Implement ReDoS protection with 100ms regex timeout mechanism - Add field validation to prevent nil pointer dereferences - Document intentional error handling pattern for audit compliance Performance & Design Improvements (P1 - Important): - Remove unnecessary mutex from BodyParser (eliminates serialization) - Fix tokenizer slash handling logic - Remove global logger dependencies (zap.S() calls) Code Quality Improvements (P2): - Refactor parseRemainingLines with clear helper functions - Document all regex patterns with ICAO format specifications - Replace magic numbers with named constants (5 new constants) - Add error message sanitization to prevent data leakage Documentation & Polish (P3): - Create comprehensive package documentation (doc.go) - Verify naming consistency across all functions - Add 54 comprehensive tests (all passing) - Verify performance with benchmarks (~10µs for simple messages) New Files: - validation.go: Input validation utilities with AFTN limits - validation_test.go: Comprehensive validation tests - regex_timeout.go: ReDoS protection mechanism - regex_timeout_test.go: Timeout protection tests - suite_test.go: Ginkgo test suite registration - doc.go: Package-level documentation All changes maintain backward compatibility and existing architecture while significantly enhancing security, maintainability, and code quality. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.5
parent
ba82b9206a
commit
c0a66cf845
@@ -33,12 +33,12 @@ func TestTokenizerDefaultWhitespace(t *testing.T) {
|
||||
func TestTokenizerSlashWhitespace(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// When slash is in whitespace, it splits tokens but is not emitted
|
||||
input := "A/B C"
|
||||
tokens := Tokenizer{Whitespace: " \n\t\r/"}.Tokenize(input)
|
||||
|
||||
expected := []Token{
|
||||
{Text: "A", Start: 0, End: 1},
|
||||
{Text: "/", Start: 1, End: 2},
|
||||
{Text: "B", Start: 2, End: 3},
|
||||
{Text: "C", Start: 4, End: 5},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user