From 8c0dd0ebbedd93cc476d7dd3fbffc4a6d75c7439 Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Tue, 3 May 2016 08:27:33 +0200 Subject: [letterspace] fix double free with disc components MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adress issue #350 For some reason our stack copy of the current node gets double-freed. Since the “components” field will probably vanish soon, we can get by for now by skipping the explicit free. --- src/luaotfload-letterspace.lua | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/luaotfload-letterspace.lua') diff --git a/src/luaotfload-letterspace.lua b/src/luaotfload-letterspace.lua index 40b3015..21a9136 100644 --- a/src/luaotfload-letterspace.lua +++ b/src/luaotfload-letterspace.lua @@ -28,9 +28,6 @@ local setfield = nodedirect.setfield local field_setter = function (name) return function (n, ...) setfield (n, name, ...) end end local field_getter = function (name) return function (n, ...) getfield (n, name, ...) end end ---- As of December 2014 the faster ``node.direct.*`` interface is ---- preferred. - local getfont = nodedirect.getfont local getid = nodedirect.getid @@ -351,7 +348,7 @@ kerncharacters = function (head) end start = c setfield(s, "components", nil) - free_node(s) + --free_node(s) --> double free with multipart components c = getfield (start, "components") end end -- cgit v1.2.3 From acd8c47a0c8bda41d1bf57a6bbc9b37b83065f6c Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Wed, 4 May 2016 21:12:08 +0200 Subject: [letterspace] fix crash in kerning by keeping the default on failed lookup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With commit 8c0dd0ebbedd kern accesses were fixed but the results never tested for the lookup, which caused the default which is set up before to be nil’ed. Fix this by reusing the value we initialized the kern factor to. --- src/luaotfload-letterspace.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/luaotfload-letterspace.lua') diff --git a/src/luaotfload-letterspace.lua b/src/luaotfload-letterspace.lua index 21a9136..78df1d7 100644 --- a/src/luaotfload-letterspace.lua +++ b/src/luaotfload-letterspace.lua @@ -413,7 +413,7 @@ kerncharacters = function (head) else local kern = 0 local kerns = prevchardata.kerns - if kerns then kern = kerns[lastchar] end + if kerns then kern = kerns[lastchar] or kern end krn = kern + quaddata[lastfont]*krn -- here insert_node_before(head,start,kern_injector(fillup,krn)) end @@ -488,7 +488,7 @@ kerncharacters = function (head) --- font doesn’t contain the glyph else local kerns = prevchardata.kerns - if kerns then kern = kerns[lastchar] end + if kerns then kern = kerns[lastchar] or kern end end end krn = kern + quaddata[lastfont]*krn -- here -- cgit v1.2.3