diff --git a/cups-str2727.patch b/cups-str2727.patch new file mode 100644 index 0000000..038d5fb --- /dev/null +++ b/cups-str2727.patch @@ -0,0 +1,54 @@ +diff -up cups-1.3.6/filter/image-jpeg.c.str2727 cups-1.3.6/filter/image-jpeg.c +--- cups-1.3.6/filter/image-jpeg.c.str2727 2007-07-11 22:46:42.000000000 +0100 ++++ cups-1.3.6/filter/image-jpeg.c 2008-02-28 22:28:45.000000000 +0000 +@@ -47,8 +47,8 @@ _cupsImageReadJPEG( + struct jpeg_error_mgr jerr; /* Error handler info */ + cups_ib_t *in, /* Input pixels */ + *out; /* Output pixels */ +- char header[16]; /* Photoshop JPEG header */ +- int psjpeg; /* Non-zero if Photoshop JPEG */ ++ jpeg_saved_marker_ptr marker; /* Pointer to marker data */ ++ int psjpeg = 0; /* Non-zero if Photoshop CMYK JPEG */ + static const char *cspaces[] = + { /* JPEG colorspaces... */ + "JCS_UNKNOWN", +@@ -61,23 +61,30 @@ _cupsImageReadJPEG( + + + /* +- * Read the first 16 bytes to determine if this is a Photoshop JPEG file... +- */ +- +- fread(header, sizeof(header), 1, fp); +- rewind(fp); +- +- psjpeg = memcmp(header + 6, "Photoshop ", 10) == 0; +- +- /* + * Read the JPEG header... + */ + + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_decompress(&cinfo); ++ jpeg_save_markers(&cinfo, JPEG_APP0 + 14, 0xffff); /* Adobe JPEG */ + jpeg_stdio_src(&cinfo, fp); + jpeg_read_header(&cinfo, 1); + ++ /* ++ * Parse any Adobe APPE data embedded in the JPEG file. Since Adobe doesn't ++ * bother following standards, we have to invert the CMYK JPEG data written by ++ * Adobe apps... ++ */ ++ ++ for (marker = cinfo.marker_list; marker; marker = marker->next) ++ if (marker->marker == (JPEG_APP0 + 14) && marker->data_length >= 12 && ++ !memcmp(marker->data, "Adobe", 5) && marker->data[11] == 2) ++ { ++ fputs("DEBUG: Adobe CMYK JPEG detected (inverting color values)\n", ++ stderr); ++ psjpeg = 1; ++ } ++ + cinfo.quantize_colors = 0; + + fprintf(stderr, "DEBUG: num_components = %d\n", cinfo.num_components); diff --git a/cups.spec b/cups.spec index 59c313a..192564c 100644 --- a/cups.spec +++ b/cups.spec @@ -6,7 +6,7 @@ Summary: Common Unix Printing System Name: cups Version: 1.3.6 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2 Group: System Environment/Daemons Source: ftp://ftp.easysw.com/pub/cups/test//cups-%{version}-source.tar.bz2 @@ -47,6 +47,7 @@ Patch21: cups-driverd-timeout.patch Patch22: cups-strict-ppd-line-length.patch Patch25: cups-usb-paperout.patch Patch26: cups-str2715.patch +Patch27: cups-str2727.patch Patch100: cups-lspp.patch Epoch: 1 Url: http://www.cups.org/ @@ -160,6 +161,7 @@ lpd emulation. %patch22 -p1 -b .strict-ppd-line-length %patch25 -p1 -b .usb-paperout %patch26 -p1 -b .str2715 +%patch27 -p1 -b .str2727 %if %lspp %patch100 -p1 -b .lspp @@ -452,6 +454,9 @@ rm -rf $RPM_BUILD_ROOT %{cups_serverbin}/daemon/cups-lpd %changelog +* Thu Feb 28 2008 Tim Waugh 1.3.6-3 +- Apply upstream fix for Adobe JPEG files (bug #166460, STR #2727). + * Sat Feb 23 2008 Tim Waugh 1.3.6-2 - Fix encoding of job-sheets option (bug #433753, STR #2715).