mirror of
https://github.com/caddyserver/caddy.git
synced 2025-01-24 17:46:57 +01:00
Fixed bug in parser; implicit server block with middleware directives
This commit is contained in:
parent
a93db40138
commit
07964a6112
1 changed files with 15 additions and 13 deletions
|
@ -41,15 +41,15 @@ func (p *parser) address() (err error) {
|
||||||
// directives not enclosed by curly braces.
|
// directives not enclosed by curly braces.
|
||||||
func (p *parser) addressBlock() error {
|
func (p *parser) addressBlock() error {
|
||||||
if !p.next() {
|
if !p.next() {
|
||||||
// file consisted of only an address
|
// file consisted only of an address
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
err := p.openCurlyBrace()
|
errOpenCurlyBrace := p.openCurlyBrace()
|
||||||
if err != nil {
|
if errOpenCurlyBrace != nil {
|
||||||
// meh, single-server configs don't need curly braces
|
// meh, single-server configs don't need curly braces
|
||||||
p.unused = &p.lexer.token // we read the token but aren't consuming it
|
// but we read a token and we won't consume it; mark it unused
|
||||||
return p.directives()
|
p.unused = &p.lexer.token
|
||||||
}
|
}
|
||||||
|
|
||||||
// When we enter an address block, we also implicitly
|
// When we enter an address block, we also implicitly
|
||||||
|
@ -60,15 +60,19 @@ func (p *parser) addressBlock() error {
|
||||||
})
|
})
|
||||||
p.scope = &p.other[0]
|
p.scope = &p.other[0]
|
||||||
|
|
||||||
err = p.directives()
|
err := p.directives()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only look for close curly brace if there was an opening
|
||||||
|
if errOpenCurlyBrace == nil {
|
||||||
err = p.closeCurlyBrace()
|
err = p.closeCurlyBrace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +210,6 @@ func (p *parser) collectTokens() error {
|
||||||
directive := p.tkn()
|
directive := p.tkn()
|
||||||
line := p.line()
|
line := p.line()
|
||||||
nesting := 0
|
nesting := 0
|
||||||
breakOk := false
|
|
||||||
cont := newController(p)
|
cont := newController(p)
|
||||||
|
|
||||||
// Re-use a duplicate directive's controller from before
|
// Re-use a duplicate directive's controller from before
|
||||||
|
@ -225,17 +228,16 @@ func (p *parser) collectTokens() error {
|
||||||
nesting++
|
nesting++
|
||||||
} else if p.line() > line && nesting == 0 {
|
} else if p.line() > line && nesting == 0 {
|
||||||
p.unused = &p.lexer.token
|
p.unused = &p.lexer.token
|
||||||
breakOk = true
|
|
||||||
break
|
break
|
||||||
} else if p.tkn() == "}" && nesting > 0 {
|
} else if p.tkn() == "}" && nesting > 0 {
|
||||||
nesting--
|
nesting--
|
||||||
} else if p.tkn() == "}" && nesting == 0 {
|
} else if p.tkn() == "}" && nesting == 0 {
|
||||||
return p.err("Syntax", "Unexpected '}' because no matching open curly brace '{'")
|
return p.err("Syntax", "Unexpected '}' because no matching opening brace")
|
||||||
}
|
}
|
||||||
cont.tokens = append(cont.tokens, p.lexer.token)
|
cont.tokens = append(cont.tokens, p.lexer.token)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !breakOk || nesting > 0 {
|
if nesting > 0 {
|
||||||
return p.eofErr()
|
return p.eofErr()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue