diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2025-11-18 19:20:29 -0800 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2025-11-18 19:20:29 -0800 |
| commit | 933c9c9721bf20bc00dab85a75546a7573c31747 (patch) | |
| tree | 62282c41bec50a844148e09b5741283aa5bc3a61 /lexer.go | |
| parent | b25fc1dbacf79d795f80ae07a5785877c2b0fdb0 (diff) | |
| download | ccl-933c9c9721bf20bc00dab85a75546a7573c31747.tar.zst | |
Holy shit fuzzing is so cool
Diffstat (limited to 'lexer.go')
| -rw-r--r-- | lexer.go | 18 |
1 files changed, 13 insertions, 5 deletions
@@ -2,6 +2,7 @@ package ccl import ( "bytes" + "fmt" "unicode" "unicode/utf8" ) @@ -26,7 +27,8 @@ func (l *lexer) yield(n int) token { return t } -func (l *lexer) skipSpace() { +func (l *lexer) skipSpace() error { +Space: for l.i < len(l.data) { if bytes.HasPrefix(l.data[l.i:], []byte("#")) || bytes.HasPrefix(l.data[l.i:], []byte("//")) { for ; l.i < len(l.data) && l.data[l.i] != '\n'; l.i++ { @@ -34,10 +36,13 @@ func (l *lexer) skipSpace() { continue } if bytes.HasPrefix(l.data[l.i:], []byte("/*")) { - for ; l.i < len(l.data) && !bytes.HasPrefix(l.data[l.i:], []byte("*/")); l.i++ { + for ; l.i < len(l.data); l.i++ { + if bytes.HasPrefix(l.data[l.i:], []byte("*/")) { + l.i += 2 + continue Space + } } - l.i += 2 - continue + return fmt.Errorf("unterminated comment") } if r, n := utf8.DecodeRune(l.data[l.i:]); unicode.IsSpace(r) { l.i += n @@ -45,6 +50,7 @@ func (l *lexer) skipSpace() { } break } + return nil } func numFirstByte(b byte) bool { @@ -72,7 +78,9 @@ func fieldTailByte(b byte) bool { } func (l *lexer) next() (token, error) { - l.skipSpace() + if err := l.skipSpace(); err != nil { + return token{}, err + } if l.i == len(l.data) { return token{}, errEOF } |
