Sophie

Sophie

distrib > Mageia > 6 > armv7hl > media > core-updates-src > by-pkgid > bc219369320b6b5781eed48254462cef > files > 27

ghostscript-9.25-1.2.mga6.src.rpm

From b7e8af4ce9f3352631c0e1efaee9b92f9bc43bb3 Mon Sep 17 00:00:00 2001
From: Chris Liddell <chris.liddell@artifex.com>
Date: Wed, 10 Oct 2018 15:48:33 +0100
Subject: [PATCH] Fix a memory leak with subclassed devices (stype)

A dynamic stype in a subclass device wasn't being free with the device - likely
an oversight from adding the subclass device specific finalize method (rather
than using the generic device finalize).

If a subclassed device has a 'dynamic' stype,
---
 base/gdevsclass.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/base/gdevsclass.c b/base/gdevsclass.c
index 0f26774..8b2642e 100644
--- a/base/gdevsclass.c
+++ b/base/gdevsclass.c
@@ -901,6 +901,11 @@ void default_subclass_finalize(const gs_memory_t *cmem, void *vptr)
     generic_subclass_data *psubclass_data = (generic_subclass_data *)dev->subclass_data;
     (void)cmem; /* unused */
 
+    if (dev->finalize)
+        dev->finalize(dev);
+
+    discard(gs_closedevice(dev));
+
     if (psubclass_data) {
         gs_free_object(dev->memory->non_gc_memory, psubclass_data, "gx_epo_finalize(suclass data)");
         dev->subclass_data = NULL;
@@ -908,6 +913,9 @@ void default_subclass_finalize(const gs_memory_t *cmem, void *vptr)
     if (dev->child) {
         gs_free_object(dev->memory->stable_memory, dev->child, "free child device memory for subclassing device");
     }
+    if (dev->stype_is_dynamic)
+        gs_free_const_object(dev->memory->non_gc_memory, dev->stype,
+                             "default_subclass_finalize");
     if (dev->parent)
         dev->parent->child = dev->child;
     if (dev->child)
-- 
2.9.1