Package: libcairo2 Version: 1.2.4-4 Severity: normal Tags: patch Cairo sometimes creates pdf files that contain invalid fonts, like the following:
<< /Type /Font /Subtype /TrueType /BaseFont /DejaVuSans /FirstChar 0 /LastChar 256 /FontDescriptor 171 0 R /Widths [ ...(255 integers)... ] >> This font contains 256 characters, but /LastChar is incorrectly set to 256 instead of 255. acroread complains about incorrect /Widths in such fonts (but shows file anyway). There are several places in source code where number of characters is passed as parameter for /LastChar, attached patch fixes this. -- System Information: Debian Release: 4.0 APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/dash Kernel: Linux 2.6.20-rc3-me Locale: LANG=uk_UA.UTF-8, LC_CTYPE=uk_UA.UTF-8 (charmap=UTF-8) Versions of packages libcairo2 depends on: ii libc6 2.3.6.ds1-9 GNU C Library: Shared libraries ii libfontconfig1 2.4.2-1 generic font configuration library ii libfreetype6 2.2.1-5 FreeType 2 font engine, shared lib ii libpng12-0 1.2.15~beta5-1 PNG library - runtime ii libx11-6 2:1.0.3-4 X11 client-side library ii libxrender1 1:0.9.1-3 X Rendering Extension client libra ii zlib1g 1:1.2.3-13 compression library - runtime libcairo2 recommends no packages. -- no debconf information
diff -urpN -U 10 libcairo-1.2.4/src/cairo-pdf-surface.c libcairo-1.2.4.fix/src/cairo-pdf-surface.c --- libcairo-1.2.4/src/cairo-pdf-surface.c 2006-08-19 01:11:58.000000000 +0200 +++ libcairo-1.2.4.fix/src/cairo-pdf-surface.c 2007-01-09 13:31:19.000000000 +0100 @@ -1658,21 +1658,21 @@ _cairo_pdf_surface_emit_type1_font_subse "%d 0 obj\r\n" "<< /Type /Font\r\n" " /Subtype /Type1\r\n" " /BaseFont /%s\r\n" " /FirstChar 0\r\n" " /LastChar %d\r\n" " /FontDescriptor %d 0 R\r\n" " /Widths [", subset_resource.id, subset.base_font, - font_subset->num_glyphs, + font_subset->num_glyphs - 1, descriptor.id); for (i = 0; i < font_subset->num_glyphs; i++) _cairo_output_stream_printf (surface->output, " %d", subset.widths[i]); _cairo_output_stream_printf (surface->output, " ]\r\n" ">>\r\n" @@ -1761,21 +1761,21 @@ _cairo_pdf_surface_emit_truetype_font_su "%d 0 obj\r\n" "<< /Type /Font\r\n" " /Subtype /TrueType\r\n" " /BaseFont /%s\r\n" " /FirstChar 0\r\n" " /LastChar %d\r\n" " /FontDescriptor %d 0 R\r\n" " /Widths [", subset_resource.id, subset.base_font, - font_subset->num_glyphs, + font_subset->num_glyphs - 1, descriptor.id); for (i = 0; i < font_subset->num_glyphs; i++) _cairo_output_stream_printf (surface->output, " %d", subset.widths[i]); _cairo_output_stream_printf (surface->output, " ]\r\n" ">>\r\n" @@ -2138,21 +2138,21 @@ _cairo_pdf_surface_write_fonts (cairo_pd "%d 0 obj\r\n" "<< /Type /Font\r\n" " /Subtype /TrueType\r\n" " /BaseFont /%s\r\n" " /FirstChar 0\r\n" " /LastChar %d\r\n" " /FontDescriptor %d 0 R\r\n" " /Widths ", font->font_id, font->base_font, - font->num_glyphs, + font->num_glyphs - 1, descriptor.id); _cairo_output_stream_printf (surface->output, "["); for (j = 0; j < font->num_glyphs; j++) _cairo_output_stream_printf (surface->output, " %d", font->widths[j]);