aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2023-07-10 17:19:05 +0200
committerKim Alvefur <zash@zash.se>2023-07-10 17:19:05 +0200
commitdeecaafbfb0bc42a68e0d1ef75770d449a204deb (patch)
tree6ed9434974610ea23a0e81984850bbb405dbacf7 /util
parent5ee4b4e8a6a888a16f24d127c1da57468c8d0c8c (diff)
downloadprosody-deecaafbfb0bc42a68e0d1ef75770d449a204deb.tar.gz
prosody-deecaafbfb0bc42a68e0d1ef75770d449a204deb.zip
util.datamanager: Fix indexing first item if not at the very start
If the first item does not start at position 0 then the index function produces a phantom first entry covering position zero until where the real first item starts. When using the index, this would make it either appear as the first item was missing or cause an off-by-one issue with remaining items.
Diffstat (limited to 'util')
-rw-r--r--util/datamanager.lua4
1 files changed, 2 insertions, 2 deletions
diff --git a/util/datamanager.lua b/util/datamanager.lua
index a124b3dc..a00b9014 100644
--- a/util/datamanager.lua
+++ b/util/datamanager.lua
@@ -329,7 +329,7 @@ local function build_list_index(username, host, datastore, items)
return fh, err, errno;
end
local prev_pos = 0; -- position before reading
- local last_item_start = 0;
+ local last_item_start = nil;
if items and items[1] then
local last_item = items[#items];
@@ -340,7 +340,7 @@ local function build_list_index(username, host, datastore, items)
for line in fh:lines() do
if line:sub(1, 4) == "item" then
- if prev_pos ~= 0 then
+ if prev_pos ~= 0 and last_item_start then
t_insert(items, { start = last_item_start; length = prev_pos - last_item_start });
end
last_item_start = prev_pos