mirror of
https://github.com/TangentFoxy/etlua.git
synced 2025-07-28 02:52:17 +00:00
fix infinite loop when trying to compile with unclosed string
This commit is contained in:
@@ -56,6 +56,7 @@ pos_to_line = function(str, pos)
|
|||||||
end
|
end
|
||||||
local Compiler
|
local Compiler
|
||||||
do
|
do
|
||||||
|
local _class_0
|
||||||
local _base_0 = {
|
local _base_0 = {
|
||||||
render = function(self)
|
render = function(self)
|
||||||
return table.concat(self.buffer)
|
return table.concat(self.buffer)
|
||||||
@@ -88,7 +89,7 @@ do
|
|||||||
end
|
end
|
||||||
}
|
}
|
||||||
_base_0.__index = _base_0
|
_base_0.__index = _base_0
|
||||||
local _class_0 = setmetatable({
|
_class_0 = setmetatable({
|
||||||
__init = function(self)
|
__init = function(self)
|
||||||
self.buffer = { }
|
self.buffer = { }
|
||||||
self.i = 0
|
self.i = 0
|
||||||
@@ -108,6 +109,7 @@ do
|
|||||||
end
|
end
|
||||||
local Parser
|
local Parser
|
||||||
do
|
do
|
||||||
|
local _class_0
|
||||||
local _base_0 = {
|
local _base_0 = {
|
||||||
open_tag = "<%",
|
open_tag = "<%",
|
||||||
close_tag = "%>",
|
close_tag = "%>",
|
||||||
@@ -137,6 +139,9 @@ do
|
|||||||
end
|
end
|
||||||
while self:in_string(self.pos, close_start) do
|
while self:in_string(self.pos, close_start) do
|
||||||
close_start, close_stop = self.str:find(self.close_tag, close_stop, true)
|
close_start, close_stop = self.str:find(self.close_tag, close_stop, true)
|
||||||
|
if not (close_start) then
|
||||||
|
return nil, self:error_for_pos(start, "failed to find string close")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
local trim_newline
|
local trim_newline
|
||||||
if "-" == self.str:sub(close_start - 1, close_start - 1) then
|
if "-" == self.str:sub(close_start - 1, close_start - 1) then
|
||||||
@@ -362,7 +367,7 @@ do
|
|||||||
end
|
end
|
||||||
}
|
}
|
||||||
_base_0.__index = _base_0
|
_base_0.__index = _base_0
|
||||||
local _class_0 = setmetatable({
|
_class_0 = setmetatable({
|
||||||
__init = function() end,
|
__init = function() end,
|
||||||
__base = _base_0,
|
__base = _base_0,
|
||||||
__name = "Parser"
|
__name = "Parser"
|
||||||
|
@@ -98,6 +98,8 @@ class Parser
|
|||||||
|
|
||||||
while @in_string @pos, close_start
|
while @in_string @pos, close_start
|
||||||
close_start, close_stop = @str\find @close_tag, close_stop, true
|
close_start, close_stop = @str\find @close_tag, close_stop, true
|
||||||
|
unless close_start
|
||||||
|
return nil, @error_for_pos start, "failed to find string close"
|
||||||
|
|
||||||
trim_newline = if "-" == @str\sub close_start - 1, close_start - 1
|
trim_newline = if "-" == @str\sub close_start - 1, close_start - 1
|
||||||
close_start -= 1
|
close_start -= 1
|
||||||
|
Reference in New Issue
Block a user