toml: solidify single-line escape validation (#12644)
							parent
							
								
									adddac4807
								
							
						
					
					
						commit
						7d0a36dd08
					
				| 
						 | 
				
			
			@ -437,17 +437,24 @@ fn (c Checker) check_quoted_escapes(q ast.Quoted) ? {
 | 
			
		|||
			escape := ch_byte.ascii_str() + next_ch.ascii_str()
 | 
			
		||||
			if is_basic {
 | 
			
		||||
				if q.is_multiline {
 | 
			
		||||
					if next_ch == byte(32) {
 | 
			
		||||
						if s.peek(1) == byte(92) {
 | 
			
		||||
							st := s.state()
 | 
			
		||||
							return error(@MOD + '.' + @STRUCT + '.' + @FN +
 | 
			
		||||
								' can not escape whitespaces before escapes in multi-line strings (`\\ \\`) at `$escape` ($st.line_nr,$st.col) in ...${c.excerpt(q.pos)}...')
 | 
			
		||||
						}
 | 
			
		||||
					if next_ch == ` ` {
 | 
			
		||||
						if !contains_newlines {
 | 
			
		||||
							st := s.state()
 | 
			
		||||
							return error(@MOD + '.' + @STRUCT + '.' + @FN +
 | 
			
		||||
								' can not escape whitespaces in multi-line strings (`\\ `) at `$escape` ($st.line_nr,$st.col) in ...${c.excerpt(q.pos)}...')
 | 
			
		||||
						}
 | 
			
		||||
						// Rest of line must only be space chars from this point on
 | 
			
		||||
						for {
 | 
			
		||||
							ch_ := s.next()
 | 
			
		||||
							if ch_ == scanner.end_of_text || ch_ == `\n` {
 | 
			
		||||
								break
 | 
			
		||||
							}
 | 
			
		||||
							if !(ch_ == ` ` || ch_ == `\t`) {
 | 
			
		||||
								st := s.state()
 | 
			
		||||
								return error(@MOD + '.' + @STRUCT + '.' + @FN +
 | 
			
		||||
									' invalid character `${byte(ch_).ascii_str()}` after `$escape` at ($st.line_nr,$st.col) in ...${c.excerpt(q.pos)}...')
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					if next_ch in [`\t`, `\n`, ` `] {
 | 
			
		||||
						s.next()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,9 +14,7 @@ const (
 | 
			
		|||
		'valid/example-v0.4.0.toml',
 | 
			
		||||
		'valid/datetime-truncate.toml', // Not considered valid since RFC 3339 doesn't permit > 6 ms digits ??
 | 
			
		||||
	]
 | 
			
		||||
	invalid_exceptions     = [
 | 
			
		||||
		'invalid/string-bad-line-ending-escape.toml',
 | 
			
		||||
	]
 | 
			
		||||
	invalid_exceptions     = []string{}
 | 
			
		||||
 | 
			
		||||
	valid_value_exceptions = [
 | 
			
		||||
		// These have correct values, and should've passed, but the format of arrays is *mixed* in the JSON ??
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue