Date: Monday, March 20, 2017 @ 08:10:47
  Author: bisson
Revision: 291094

fix FS#53370

Added:
  fontforge/trunk/pymem_free.patch
Modified:
  fontforge/trunk/PKGBUILD

------------------+
 PKGBUILD         |   13 +++-
 pymem_free.patch |  141 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 151 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2017-03-19 16:15:04 UTC (rev 291093)
+++ PKGBUILD    2017-03-20 08:10:47 UTC (rev 291094)
@@ -5,7 +5,7 @@
 
 pkgname=fontforge
 pkgver=20161012
-pkgrel=3
+pkgrel=4
 pkgdesc='Outline and bitmap font editor'
 url='https://fontforge.github.io/'
 arch=('i686' 'x86_64')
@@ -15,10 +15,17 @@
          'pango' 'giflib' 'libtiff' 'libxml2' 'libspiro' 'libunicodenames' 
'zeromq'
          'python' 'desktop-file-utils' 'gtk-update-icon-cache' 
'hicolor-icon-theme')
 source=("https://github.com/fontforge/fontforge/archive/${pkgver}.tar.gz";
-        'https://fontforge.github.io/cidmaps.tgz')
+        'https://fontforge.github.io/cidmaps.tgz'
+        'pymem_free.patch')
 sha256sums=('a5f5c2974eb9109b607e24f06e57696d5861aaebb620fc2c132bdbac6e656351'
-            '1bf9c7eb8835e6ed94e62cb49f1141bc046c562849e52e6c3c7f1d7cfc95c7b3')
+            '1bf9c7eb8835e6ed94e62cb49f1141bc046c562849e52e6c3c7f1d7cfc95c7b3'
+            'fd6059fe263e12d02240466c23e773fcd7776ea37c90de52bafd3dc40f09a524')
 
+prepare() {
+       cd "${srcdir}/${pkgname}-${pkgver}"
+       patch -p1 -i ../pymem_free.patch
+}
+
 build() {
        cd "${srcdir}/${pkgname}-${pkgver}"
        export LIBZMQ_LIBS=-lzmq

Added: pymem_free.patch
===================================================================
--- pymem_free.patch                            (rev 0)
+++ pymem_free.patch    2017-03-20 08:10:47 UTC (rev 291094)
@@ -0,0 +1,141 @@
+From b5a057f004d2686f5ae47d3f892c63b531c7da13 Mon Sep 17 00:00:00 2001
+From: Parag A Nemade <pnem...@fedoraproject.org>
+Date: Fri, 10 Mar 2017 08:41:24 +0530
+Subject: [PATCH] Fix many of the free() calls to PyMem_Free() for the
+ python3.6 requirement This is also based on the discussion happened in
+ upstream issue https://github.com/fontforge/fontforge/issues/2992
+
+This commit is a fix for the reported two problems in issue
+https://github.com/fontforge/fontforge/issues/3042
+
+The upstream documentation says
+PyArg_ParseTuple() will allocate a buffer of the needed size, copy the
+encoded data into this buffer and adjust *buffer to reference the newly
+allocated storage. The caller is responsible for calling PyMem_Free()
+to free the allocated buffer after use.
+---
+ fontforge/python.c | 27 ++++++++++++++-------------
+ 1 file changed, 14 insertions(+), 13 deletions(-)
+
+diff --git a/fontforge/python.c b/fontforge/python.c
+index faa7485..758422a 100644
+--- a/fontforge/python.c
++++ b/fontforge/python.c
+@@ -1045,7 +1045,7 @@ static PyObject *PyFF_OpenFont(PyObject *UNUSED(self), 
PyObject *args) {
+     if ( !PyArg_ParseTuple(args,"es|i", "UTF-8", &filename, &openflags ))
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+ 
+     /* The actual filename opened may be different from the one passed
+      * to LoadSplineFont, so we can't report the filename on an
+@@ -1072,7 +1072,7 @@ static PyObject *PyFF_FontsInFile(PyObject 
*UNUSED(self), PyObject *args) {
+     if ( !PyArg_ParseTuple(args,"es","UTF-8",&filename) )
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+     ret = GetFontNames(locfilename, 1);
+     free(locfilename);
+     cnt = 0;
+@@ -4128,7 +4128,7 @@ static PyObject *PyFFLayer_export(PyFF_Layer *self, 
PyObject *args) {
+     if ( !PyArg_ParseTuple(args,"es","UTF-8",&filename) )
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+ 
+     pt = strrchr(locfilename,'.');
+     if ( pt==NULL ) pt=locfilename;
+@@ -7785,7 +7785,7 @@ static PyObject *PyFFGlyph_import(PyObject *self, 
PyObject *args) {
+     if ( !PyArg_ParseTuple(args,"es|O","UTF-8",&filename, &flags) )
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+ 
+     /* Check if the file exists and is readable */
+     if ( access(locfilename,R_OK)!=0 ) {
+@@ -7854,7 +7854,7 @@ static PyObject *PyFFGlyph_export(PyObject *self, 
PyObject *args) {
+     if ( !PyArg_ParseTuple(args,"es|OO","UTF-8",&filename,&foo,&bar) )
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+ 
+     pt = strrchr(locfilename,'.');
+     if ( pt==NULL ) pt=locfilename;
+@@ -13549,7 +13549,7 @@ return (NULL);
+           &to_background) )
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+ 
+     ext = strrchr(locfilename,'.');
+     if ( ext==NULL ) {
+@@ -13623,7 +13623,7 @@ return (NULL);
+     if ( !PyArg_ParseTuple(args,"OesO", &other, "UTF-8", &filename, 
&flagstuple ))
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+ 
+     if ( !PyType_IsSubtype(&PyFF_FontType, Py_TYPE(other)) ) {
+       PyErr_Format(PyExc_TypeError,"First argument must be a fontforge font");
+@@ -15690,7 +15690,7 @@ return( NULL );
+       }
+     }
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+     if ( 
!GenerateScript(fv->sf,locfilename,bitmaptype,iflags,resolution,subfontdirectory,
+           NULL,fv->normal==NULL?fv->map:fv->normal,rename_to,layer) ) {
+       PyErr_Format(PyExc_EnvironmentError, "Font generation failed");
+@@ -15846,7 +15846,7 @@ return( NULL );
+     }
+ 
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+ 
+     if ( !WriteTTC(locfilename,head,ff_ttc,bf,iflags,layer,ittcflags)) {
+       PyErr_Format(PyExc_EnvironmentError, "Font generation failed");
+@@ -15874,7 +15874,7 @@ return (NULL);
+     if ( !PyArg_ParseTuple(args,"es|s","UTF-8",&filename,&lookup_name) )
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+ 
+     if ( lookup_name!=NULL ) {
+       otl = SFFindLookup(fv->sf,lookup_name);
+@@ -15914,7 +15914,8 @@ return (NULL);
+     if ( !PyArg_ParseTuple(args,"es","UTF-8",&filename) )
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
++
+     if ( !LoadKerningDataFromMetricsFile(fv->sf,locfilename,fv->map)) {
+       PyErr_Format(PyExc_EnvironmentError, "No metrics data found");
+ return( NULL );
+@@ -15938,7 +15939,7 @@ return (NULL);
+           &preserveCrossFontKerning, &openflags) )
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+     sf = LoadSplineFont(locfilename,openflags);
+     if ( sf==NULL ) {
+       PyErr_Format(PyExc_EnvironmentError, "No font found in file \"%s\"", 
locfilename);
+@@ -15966,7 +15967,7 @@ return (NULL);
+     if ( !PyArg_ParseTuple(args,"des|i",&fraction,"UTF-8",&filename, 
&openflags) )
+ return( NULL );
+     locfilename = utf82def_copy(filename);
+-    free(filename);
++    PyMem_Free(filename);
+     sf = LoadSplineFont(locfilename,openflags);
+     if ( sf==NULL ) {
+       PyErr_Format(PyExc_EnvironmentError, "No font found in file \"%s\"", 
locfilename);

Reply via email to