From 24fc36c10f5c1c34e3059a8334178743052d7ad2 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 2 Apr 2010 08:44:45 +0100 Subject: [PATCH] script: Fix endian encoding of '<|' length. Andrea found and fixed (and updated all the traces!) an endian bug where we were encoding a 32bit length inside the compressed string stream. However, this one inside the script backed escaped his notice. --- src/cairo-script-surface.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/cairo-script-surface.c b/src/cairo-script-surface.c index eb8a29d65..9b37ca99b 100644 --- a/src/cairo-script-surface.c +++ b/src/cairo-script-surface.c @@ -59,6 +59,12 @@ #include +#ifdef WORDS_BIGENDIAN +#define to_be32(x) x +#else +#define to_be32(x) bswap_32(x) +#endif + #define _cairo_output_stream_puts(S, STR) \ _cairo_output_stream_write ((S), (STR), strlen (STR)) @@ -1267,6 +1273,7 @@ _emit_image_surface (cairo_script_surface_t *surface, base85_stream = _cairo_base85_stream_create (ctx->stream); + len = to_be32 (len); _cairo_output_stream_write (base85_stream, &len, sizeof (len)); zlib_stream = _cairo_deflate_stream_create (base85_stream); @@ -2585,7 +2592,7 @@ _emit_type42_font (cairo_script_surface_t *surface, load_flags); base85_stream = _cairo_base85_stream_create (ctx->stream); - len = size; + len = to_be32 (size); _cairo_output_stream_write (base85_stream, &len, sizeof (len)); zlib_stream = _cairo_deflate_stream_create (base85_stream);