Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package ghostscript Upstream regression in 9.27 was fixed in ghostscript/9.27~dfsg-2 with cherrypicking almost 50 lines of code, debdiff attached. diff -Nru ghostscript-9.27~dfsg/debian/changelog ghostscript-9.27~dfsg/debian/changelog --- ghostscript-9.27~dfsg/debian/changelog 2019-04-05 03:17:20.000000000 +0900 +++ ghostscript-9.27~dfsg/debian/changelog 2019-04-20 17:16:50.000000000 +0900 @@ -1,3 +1,11 @@ +ghostscript (9.27~dfsg-2) unstable; urgency=medium + + * Add patch cherry-picked upstream + to fix regression resolving bounding box of font glyphs. + Closes: Bug#927429. Thanks to Kenshi Muto. + + -- Jonas Smedegaard <d...@jones.dk> Sat, 20 Apr 2019 10:16:50 +0200 + ghostscript (9.27~dfsg-1) unstable; urgency=high [ upstream ] diff -Nru ghostscript-9.27~dfsg/debian/patches/020190410~06c9207.patch ghostscript-9.27~dfsg/debian/patches/020190410~06c9207.patch --- ghostscript-9.27~dfsg/debian/patches/020190410~06c9207.patch 1970-01-01 09:00:00.000000000 +0900 +++ ghostscript-9.27~dfsg/debian/patches/020190410~06c9207.patch 2019-04-20 17:15:04.000000000 +0900 @@ -0,0 +1,91 @@ +Description: Fix regression resolving bounding box of font glyphs + Re-introduce over/underflow workaround + . + Commit 355434f4b1bbe8c4f98cafad5a6868aa2f0eaae1 reverted a workaround + that compensated for over/underflow in Freetype's TTF hinting + (related to freedom and projection vector calculations). + That problem no longer exists in recent Freetype releases, + and the workaround actually caused other issues to occur with hinting. + . + What wasn't obvious was + that the workaround also protected over/underflow issues + relating to the unitsPerEm value. + . + So this re-instates the workaround, + but bases the decision on how the final scale is distributing + between the Freetype "size" and the Freetype matrix + on the unitsPerEm value + (this is relevant for all font types + as for non-TTF font types + Freetype derives the unitsPerEm from the FontMatrix for PS type fonts). +Origin: upstream, http://git.ghostscript.com/?p=ghostpdl.git;h=06c9207 +Author: Chris Liddell <chris.lidd...@artifex.com> +Forwarded: yes +Bug: http://bugs.ghostscript.com/show_bug.cgi?id=700952 +Bug: http://bugs.ghostscript.com/show_bug.cgi?id=700875 +Bug-Debian: https://bugs.debian.org/927429 +Last-Update: 2019-04-20 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/base/fapi_ft.c ++++ b/base/fapi_ft.c +@@ -974,13 +974,19 @@ + */ + static void + transform_decompose(FT_Matrix * a_transform, FT_UInt * xresp, FT_UInt * yresp, +- FT_Fixed * a_x_scale, FT_Fixed * a_y_scale) ++ FT_Fixed * a_x_scale, FT_Fixed * a_y_scale, int units_per_EM) + { + double scalex, scaley, fact = 1.0; + double factx = 1.0, facty = 1.0; + FT_Matrix ftscale_mat; + FT_UInt xres; + FT_UInt yres; ++ /* We have to account for units_per_EM as we fiddle with the scaling ++ * in order to avoid underflow (mostly in the TTF hinting code), but ++ * we also want to clamp to a lower value (512, admittedly arrived at ++ * via experimentation) in order to preserve the fidelity of the outlines. ++ */ ++ double upe = units_per_EM > 512 ? (float)units_per_EM : 512.0; + + scalex = hypot((double)a_transform->xx, (double)a_transform->xy); + scaley = hypot((double)a_transform->yx, (double)a_transform->yy); +@@ -1067,10 +1073,25 @@ + scalex *= fact; + } + +- ftscale_mat.xx = (FT_Fixed) (65536.0 / scalex); +- ftscale_mat.xy = (FT_Fixed) 0; +- ftscale_mat.yx = (FT_Fixed) 0; +- ftscale_mat.yy = (FT_Fixed) (65536.0 / scaley); ++ /* see above */ ++ fact = 1.0; ++ while (scaley * yres > (double)upe * 72.0 && (xres > 0 && yres > 0) ++ && (scalex > 0.0 && scaley > 0.0)) { ++ if (scaley < yres) { ++ xres >>= 1; ++ yres >>= 1; ++ fact *= 2.0; ++ } ++ else { ++ scalex /= 1.25; ++ scaley /= 1.25; ++ } ++ } ++ ++ ftscale_mat.xx = (FT_Fixed) ((65536.0 / scalex) * fact); ++ ftscale_mat.xy = 0; ++ ftscale_mat.yx = 0; ++ ftscale_mat.yy = (FT_Fixed) ((65536.0 / scaley) * fact); + + FT_Matrix_Multiply(a_transform, &ftscale_mat); + memcpy(a_transform, &ftscale_mat, sizeof(FT_Matrix)); +@@ -1315,7 +1336,7 @@ + * transform. + */ + transform_decompose(&face->ft_transform, &face->horz_res, +- &face->vert_res, &face->width, &face->height); ++ &face->vert_res, &face->width, &face->height, face->ft_face->units_per_EM); + + ft_error = FT_Set_Char_Size(face->ft_face, face->width, face->height, + face->horz_res, face->vert_res); diff -Nru ghostscript-9.27~dfsg/debian/patches/series ghostscript-9.27~dfsg/debian/patches/series --- ghostscript-9.27~dfsg/debian/patches/series 2019-04-05 01:39:06.000000000 +0900 +++ ghostscript-9.27~dfsg/debian/patches/series 2019-04-20 17:09:53.000000000 +0900 @@ -1,3 +1,4 @@ +020190410~06c9207.patch 2001_docdir_fix_for_debian.patch 2002_gs_man_fix_debian.patch 2003_support_multiarch.patch unblock ghostscript/9.27~dfsg-2