1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
diff -up ghostscript-9.00/cups/gdevcups.c.gdevcups-691733 ghostscript-9.00/cups/gdevcups.c
--- ghostscript-9.00/cups/gdevcups.c.gdevcups-691733 2011-01-10 16:48:57.381703112 +0000
+++ ghostscript-9.00/cups/gdevcups.c 2011-01-10 16:52:02.021813786 +0000
@@ -2898,11 +2898,12 @@ cups_put_params(gx_device *pdev, /*
int margins_set; /* Were the margins set? */
int size_set; /* Was the size set? */
int color_set; /* Were the color attrs set? */
- gdev_prn_space_params sp; /* Space parameter data */
+ gdev_prn_space_params sp_old; /* Space parameter data */
int width, /* New width of page */
height, /* New height of page */
width_old = 0, /* Previous width of page */
height_old = 0; /* Previous height of page */
+ bool transp_old = 0; /* Previous transparency usage state */
ppd_attr_t *backside = NULL,
*backsiderequiresflippedmargins = NULL;
float swap;
@@ -2996,11 +2997,23 @@ cups_put_params(gx_device *pdev, /*
} \
}
+ sp_old = ((gx_device_printer *)pdev)->space_params;
+ width_old = pdev->width;
+ height_old = pdev->height;
+ transp_old = cups->page_uses_transparency;
size_set = param_read_float_array(plist, ".MediaSize", &arrayval) == 0 ||
param_read_float_array(plist, "PageSize", &arrayval) == 0;
margins_set = param_read_float_array(plist, "Margins", &arrayval) == 0;
color_set = param_read_int(plist, "cupsColorSpace", &intval) == 0 ||
param_read_int(plist, "cupsBitsPerColor", &intval) == 0;
+ /* We set the old dimensions to 1 if we have a color depth change, so
+ that memory reallocation gets forced. This is perhaps not the correct
+ approach to prevent crashes like in bug 690435. We keep it for the
+ time being until we decide finally */
+ if (color_set) {
+ width_old = 1;
+ height_old = 1;
+ }
/* We also recompute page size and margins if we simply get onto a new
page without necessarily having a page size change in the PostScript
code, as for some printers margins have to be flipped on the back sides of
@@ -3081,9 +3094,9 @@ cups_put_params(gx_device *pdev, /*
stringoption(cupsPageSizeName, "cupsPageSizeName");
#endif /* CUPS_RASTER_SYNCv1 */
- if ((code = param_read_string(plist, "cups->Profile", &stringval)) < 0)
+ if ((code = param_read_string(plist, "cupsProfile", &stringval)) < 0)
{
- param_signal_error(plist, "cups->Profile", code);
+ param_signal_error(plist, "cupsProfile", code);
return (code);
}
else if (code == 0)
@@ -3096,7 +3109,7 @@ cups_put_params(gx_device *pdev, /*
cups_set_color_info(pdev);
- /*
+ /*
* Then process standard page device options...
*/
@@ -3404,17 +3417,6 @@ cups_put_params(gx_device *pdev, /*
* does not keep track of the margins in the bitmap size...
*/
- /* We set the old dimensions to -1 if we have a color depth change, so
- that memory reallocation gets forced. This is perhaps not the correct
- approach to preven crashes like in bug 690435. We keep it for the
- time being until we decide finally */
- if (color_set) {
- width_old = -1;
- height_old = -1;
- } else {
- width_old = pdev->width;
- height_old = pdev->height;
- }
if (cups->landscape)
{
width = (pdev->MediaSize[1] - pdev->HWMargins[1] - pdev->HWMargins[3]) *
@@ -3457,11 +3459,10 @@ cups_put_params(gx_device *pdev, /*
pdev->MediaSize[0], pdev->MediaSize[1], width, height);
#endif /* DEBUG */
- sp = ((gx_device_printer *)pdev)->space_params;
-
- if ((code = gdev_prn_maybe_realloc_memory((gx_device_printer *)pdev, &sp,
+ if ((code = gdev_prn_maybe_realloc_memory((gx_device_printer *)pdev,
+ &sp_old,
width_old, height_old,
- cups->page_uses_transparency))
+ transp_old))
< 0)
return (code);
#ifdef DEBUG
@@ -3642,6 +3643,10 @@ cups_set_color_info(gx_device *pdev) /*
cups->header.cupsBitsPerPixel = cups->header.cupsBitsPerColor;
cups->color_info.depth = cups->header.cupsBitsPerPixel;
cups->color_info.num_components = 1;
+ cups->color_info.dither_grays = 1L << cups->header.cupsBitsPerColor;
+ cups->color_info.dither_colors = 1L << cups->header.cupsBitsPerColor;
+ cups->color_info.max_gray = cups->color_info.dither_grays - 1;
+ cups->color_info.max_color = cups->color_info.dither_grays - 1;
break;
case CUPS_CSPACE_CMY :
|