@@ -45,7 +45,6 @@ proc scanPar(p: var TTmplParser, d: int) =
4545 let hi = p.x.len - 1
4646 while i <= hi:
4747 case p.x[i]
48- of '\0 ' : break
4948 of '(' : inc (p.par)
5049 of ')' : dec (p.par)
5150 of '[' : inc (p.bracket)
@@ -64,16 +63,22 @@ const
6463
6564proc parseLine (p: var TTmplParser ) =
6665 var j = 0
67- while p.x[j] == ' ' : inc (j)
66+ let hi = p.x.len - 1
67+
68+ if hi == 0 :
69+ return
70+
71+ while j <= hi and p.x[j] == ' ' : inc (j)
72+
6873 if p.x[0 ] == p.nimDirective and p.x[1 ] == '?' :
6974 newLine (p)
7075 elif p.x[j] == p.nimDirective:
7176 newLine (p)
7277 inc (j)
73- while p.x[j] == ' ' : inc (j)
78+ while j <= hi and p.x[j] == ' ' : inc (j)
7479 let d = j
7580 var keyw = " "
76- while p.x[j] in PatternChars :
81+ while j <= hi and p.x[j] in PatternChars :
7782 add (keyw, p.x[j])
7883 inc (j)
7984
@@ -127,10 +132,8 @@ proc parseLine(p: var TTmplParser) =
127132 llStreamWrite (p.outp, " (\" " )
128133 inc (p.emitPar)
129134 p.state = psTempl
130- while true :
135+ while j <= hi :
131136 case p.x[j]
132- of '\0 ' :
133- break
134137 of '\x01 ' .. '\x1F ' , '\x80 ' .. '\xFF ' :
135138 llStreamWrite (p.outp, " \\ x" )
136139 llStreamWrite (p.outp, toHex (ord (p.x[j]), 2 ))
@@ -157,11 +160,8 @@ proc parseLine(p: var TTmplParser) =
157160 llStreamWrite (p.outp, '(' )
158161 inc (j)
159162 var curly = 0
160- while true :
163+ while j <= hi :
161164 case p.x[j]
162- of '\0 ' :
163- localError (p.info, errXExpected, " }" )
164- break
165165 of '{' :
166166 inc (j)
167167 inc (curly)
@@ -174,6 +174,9 @@ proc parseLine(p: var TTmplParser) =
174174 else :
175175 llStreamWrite (p.outp, p.x[j])
176176 inc (j)
177+ if curly > 0 :
178+ localError (p.info, errXExpected, " }" )
179+ break
177180 llStreamWrite (p.outp, ')' )
178181 llStreamWrite (p.outp, p.conc)
179182 llStreamWrite (p.outp, '\" ' )
@@ -182,7 +185,7 @@ proc parseLine(p: var TTmplParser) =
182185 llStreamWrite (p.outp, p.conc)
183186 llStreamWrite (p.outp, p.toStr)
184187 llStreamWrite (p.outp, '(' )
185- while p.x[j] in PatternChars :
188+ while j <= hi and p.x[j] in PatternChars :
186189 llStreamWrite (p.outp, p.x[j])
187190 inc (j)
188191 llStreamWrite (p.outp, ')' )
0 commit comments