about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2023-11-24 19:19:29 -0800
committerKartik K. Agaram <vc@akkartik.com>2023-11-24 19:19:29 -0800
commitc1f7f17f9caa70ffc4857f64db59ff41741b0caf (patch)
tree74442818914d8bbac67fce7df0dafe44b6827d88
parent0751b389321cde6db5528704fc3613910f30ccbb (diff)
downloadview.love-c1f7f17f9caa70ffc4857f64db59ff41741b0caf.tar.gz
bugfix: infinite loop inside a very narrow window
I'm not sure this can trigger everywhere (I've only been able to
exercise it in Lua Carousel), but it seems like a safety net worth
having against future modifications by anybody.
-rw-r--r--source_text.lua4
-rw-r--r--text.lua4
2 files changed, 6 insertions, 2 deletions
diff --git a/source_text.lua b/source_text.lua
index f93e859..f60123e 100644
--- a/source_text.lua
+++ b/source_text.lua
@@ -128,7 +128,9 @@ function Text.populate_screen_line_starting_pos(State, line_index)
         -- long word; chop it at some letter
         -- We're not going to reimplement TeX here.
         local bpos = Text.nearest_pos_less_than(frag, State.width - x)
-        -- everything works if bpos == 0, but is a little inefficient
+        if x == 0 and bpos == 0 then
+          assert(false, ("Infinite loop while line-wrapping. Editor is %dpx wide; window is %dpx wide"):format(State.width, App.screen.width))
+        end
         pos = pos + bpos
         local boffset = Text.offset(frag, bpos+1)  -- byte _after_ bpos
         frag = string.sub(frag, boffset)
diff --git a/text.lua b/text.lua
index db51ac4..2383137 100644
--- a/text.lua
+++ b/text.lua
@@ -103,7 +103,9 @@ function Text.populate_screen_line_starting_pos(State, line_index)
         -- long word; chop it at some letter
         -- We're not going to reimplement TeX here.
         local bpos = Text.nearest_pos_less_than(frag, State.width - x)
-        -- everything works if bpos == 0, but is a little inefficient
+        if x == 0 and bpos == 0 then
+          assert(false, ("Infinite loop while line-wrapping. Editor is %dpx wide; window is %dpx wide"):format(State.width, App.screen.width))
+        end
         pos = pos + bpos
         local boffset = Text.offset(frag, bpos+1)  -- byte _after_ bpos
         frag = string.sub(frag, boffset)