From 7f9b32e36a8fdfe3efdcdb05b84cafd297641d85 Mon Sep 17 00:00:00 2001
From: Albert Krewinkel <albert@zeitkraut.de>
Date: Tue, 11 Jun 2019 19:39:42 +0200
Subject: data/pandoc.lua: fix deletion of nonexistent attributes

Fixes: #5569
---
 data/pandoc.lua            | 5 ++++-
 test/lua/module/pandoc.lua | 6 ++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/data/pandoc.lua b/data/pandoc.lua
index 8a45a39e9..859ecedc4 100644
--- a/data/pandoc.lua
+++ b/data/pandoc.lua
@@ -846,7 +846,10 @@ local AttributeList = {
 
   __newindex = function (t, k, v)
     local cur, idx = List.find_if(t, assoc_key_equals(k))
-    if v == nil then
+    if v == nil and not cur then
+      -- deleted key does not exists in list
+      return
+    elseif v == nil then
       table.remove(t, idx)
     elseif cur then
       cur[2] = v
diff --git a/test/lua/module/pandoc.lua b/test/lua/module/pandoc.lua
index 0bb4af9aa..1ecd1f609 100644
--- a/test/lua/module/pandoc.lua
+++ b/test/lua/module/pandoc.lua
@@ -62,6 +62,12 @@ return {
         local assoc_list = setmetatable(attributes, nil)
         assert.are_same(assoc_list, {{'b', '2'}})
       end),
+      test('remains unchanged if deleted key did not exist', function ()
+        local assoc_list = pandoc.List:new {{'alpha', 'x'}, {'beta', 'y'}}
+        local attributes = pandoc.Attr('', {}, assoc_list:clone()).attributes
+        attributes.a = nil
+        assert.are_same(pandoc.List:new(attributes), assoc_list)
+      end),
       test('gives key-value pairs when iterated-over', function ()
         local attributes = {width = '11', height = '22', name = 'test'}
         local attr = pandoc.Attr('', {}, attributes)
-- 
cgit v1.2.3