ports/print/ghostscript7-base/files/patch-src:gdevpdfs.c
Hiroki Sato 27470e1676 - Split ghostscript into X11-independent and -dependent parts:
* print/ghostscript{7,8,9,9-agpl}-base

   Installs Ghostscript binary, libgs, and related files.
   These ports do not depend on X11 libraries (i.e. x11* devices
   are not available).  USES=ghostscript will set dependency on
   one of them depending on GHOSTSCRIPT_DEFAULT.

   The default device is set to "display" or "bbox".

 * print/ghostscript{7,8,9,9-agpl}-x11

   Installs a shared library which provides X11 support to
   the installed Ghostscript binaries.  x11* devices will be
   enabled when the library is available.

   This depends on *-base (RUN_DEPENDS).  USES=ghostscript:x11
   will set dependency on one of them.

- Fix integer overflow reported as CVE-2015-3228.

- Update Uses/ghostscript.mk:

 * Add x11 keyword.  nox11 keyword is now obsolete.

 * Use packagename in *_DEPENDS line to prevent relationship between
   -base and -x11 packages from being broken.

- Fix x11/nox11 keyword and bump PORTREVISION in ports using
  USES=ghostscript to update dependency of pre-compiled packages.
2015-08-22 17:48:35 +00:00

41 lines
1.3 KiB
C

--- src/gdevpdfs.c.org 2003-09-20 00:11:16.000000000 +0900
+++ src/gdevpdfs.c 2003-09-25 17:44:10.000000000 +0900
@@ -481,15 +481,21 @@
if (cid < pfd->chars_count) {
int index = cid >> 3, mask = 0x80 >> (cid & 7);
+ int gid;
+
+ if (!(pfd->chars_used.data[index] & mask) ||
+ !(psubf->widths_known[index] & mask)) {
- if (!(pfd->chars_used.data[index] & mask)) {
- pfd->chars_used.data[index] |= mask;
if (psubf->CIDToGIDMap) {
gs_font_cid2 *const subfont2 =
(gs_font_cid2 *)subfont;
- int gid =
- subfont2->cidata.CIDMap_proc(subfont2, glyph);
+ gid = subfont2->cidata.CIDMap_proc(subfont2, glyph);
+ }
+ }
+ if (!(pfd->chars_used.data[index] & mask)) {
+ pfd->chars_used.data[index] |= mask;
+ if (psubf->CIDToGIDMap) {
if (gid >= 0) {
psubf->CIDToGIDMap[cid] = gid;
mark_glyphs_used(subfont, gid + gs_min_cid_glyph,
@@ -500,7 +506,11 @@
if (!(psubf->widths_known[index] & mask)) {
int width;
- code = pdf_glyph_width(psubf, glyph, subfont, &width);
+ if (psubf->CIDToGIDMap)
+ code = pdf_glyph_width(psubf, gid + gs_min_cid_glyph,
+ subfont, &width);
+ else
+ code = pdf_glyph_width(psubf, glyph, subfont, &width);
if (code == 0) {
psubf->Widths[cid] = width;
psubf->widths_known[index] |= mask;