From 1018d1c46ced89748905e31c54ae9cab25102433 Mon Sep 17 00:00:00 2001 From: Fayti1703 Date: Tue, 28 Sep 2021 13:40:27 +0200 Subject: [PATCH] Properly truncate utf-8 text Simply slicing byte-wise produces illegal sequences -- throw away any leftover illegal sequences as well. --- src/ui/draw.lua | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/ui/draw.lua b/src/ui/draw.lua index 2d4bd7d..7facb37 100644 --- a/src/ui/draw.lua +++ b/src/ui/draw.lua @@ -12,6 +12,8 @@ local music = Luigi(require 'ui.music') local style = require 'ui.style' local theme = require 'lib.luigi.theme.dark' +local utf8 = require("utf8") + layout:setStyle(style) settings:setStyle(style) sequence:setStyle(style) @@ -295,7 +297,12 @@ end) settings.customseed:onChange(function() if #settings.customseed.value > 20 then - settings.customseed.value = settings.customseed.value:sub(1, 20) + local str = settings.customseed.value:sub(1, 20) + local length, invalidPos = utf8.len(str) + if not length then -- produced invalid sequence, need to adjust + str = str:sub(1, invalidPos - 1) + end + settings.customseed.value = str end settings.seedcount.text = ("%s/20"):format(#settings.customseed.value) end) @@ -344,4 +351,4 @@ function C:setStatus(text) layout.status.text = text end -return C \ No newline at end of file +return C