Package: ppdfilt
Version: 2:0.10-7
Severity: normal
Acroread is producing postscript files with
%%BeginBinary: 1
img
%%EndBinary
(don't ask me why it is using BeginBinary instead of BeginData,
and why it is 1 when Adobe says unit is bytes unless Lines is given,
but that does not matter for this problem. All that matter is that
the number is quite low).
If ppdfilt -2 hits such a statement, is always copies 8192 bytes
verbatimly, thus sometimes overlooking a %%Page header, which
results in multiple pages printed on the same place.
It also does output the %%End but not the %%Begin.
The attached patch fixes both issues here.
Hochachtungsvoll,
Bernhard R. Link
--- libppd-0.10.orig/src/ppdfilt.c
+++ libppd-0.10/src/ppdfilt.c
@@ -570,10 +590,15 @@
else if (strncmp(line, "%%BeginBinary:", 14) == 0
|| (strncmp(line, "%%BeginData:", 12) == 0
&& strstr(line, "Binary") != NULL)) {
+ // Output line to keep Begin/End intact
+ puts(line);
// Copy binary data...
tbytes = atoi(strchr(line, ':') + 1);
while (tbytes > 0) {
- nbytes = fread(line, 1, sizeof(line), fp);
+ if ((size_t)tbytes < sizeof(line))
+ nbytes = fread(line, 1, tbytes, fp);
+ else
+ nbytes = fread(line, 1, sizeof(line), fp);
fwrite(line, 1, nbytes, stdout);
tbytes -= nbytes;
}
@@ -637,10 +662,22 @@
} else if (strncmp(line, "%%BeginBinary:", 14) == 0
|| (strncmp(line, "%%BeginData:", 12) == 0
&& strstr(line, "Binary") != NULL)) {
+ // First copy line (so that the %%End is not alone:
+ if (!get_sloworder(flags))
+ puts(line);
+ if (get_slowcollate(flags) || get_sloworder(flags)) {
+ fputs(line, temp);
+ putc('\n', temp);
+ }
// Copy binary data...
+ // TODO: this still need support for
+ // '%%BeginData num Bynary Lines'
tbytes = atoi(strchr(line, ':') + 1);
while (tbytes > 0) {
- nbytes = fread(line, 1, sizeof(line), fp);
+ if ((size_t)tbytes < sizeof(line))
+ nbytes = fread(line, 1, tbytes, fp);
+ else
+ nbytes = fread(line, 1, sizeof(line), fp);
if (!get_sloworder(flags))
fwrite(line, 1, nbytes, stdout);