From 8c894f283fc7ef3f50df0a513a7009c91042db79 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Tue, 30 Oct 2012 10:57:33 +0000 Subject: [PATCH] fix a segv with colour difference --- libvips/arithmetic/arithmetic.c | 8 ++++---- libvips/colour/colour.c | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/libvips/arithmetic/arithmetic.c b/libvips/arithmetic/arithmetic.c index 36b86c29..5a33dc4d 100644 --- a/libvips/arithmetic/arithmetic.c +++ b/libvips/arithmetic/arithmetic.c @@ -204,8 +204,8 @@ int vips__formatalike( VipsImage *in1, VipsImage *in2, VipsImage **out1, VipsImage **out2 ) { - IMAGE *in[2]; - IMAGE *out[2]; + VipsImage *in[2]; + VipsImage *out[2]; in[0] = in1; in[1] = in2; @@ -223,8 +223,8 @@ int vips__sizealike( VipsImage *in1, VipsImage *in2, VipsImage **out1, VipsImage **out2 ) { - IMAGE *in[2]; - IMAGE *out[2]; + VipsImage *in[2]; + VipsImage *out[2]; in[0] = in1; in[1] = in2; diff --git a/libvips/colour/colour.c b/libvips/colour/colour.c index 12bbbf92..7c4b0121 100644 --- a/libvips/colour/colour.c +++ b/libvips/colour/colour.c @@ -41,6 +41,7 @@ #include #include +#include #include "colour.h" @@ -419,7 +420,7 @@ vips_colour_difference_build( VipsObject *object ) VipsImage *right; VipsImage *extra; - t = (VipsImage **) vips_object_local_array( object, 10 ); + t = (VipsImage **) vips_object_local_array( object, 12 ); left = difference->left; right = difference->right; @@ -514,6 +515,11 @@ vips_colour_difference_build( VipsObject *object ) return( -1 ); right = t[9]; + if( vips__sizealike( left, right, &t[10], &t[11] ) ) + return( -1 ); + left = t[10]; + right = t[11]; + colour->n = 2; colour->in = (VipsImage **) vips_object_local_array( object, 3 ); colour->in[0] = left; @@ -574,8 +580,13 @@ vips_colour_difference_class_init( VipsColourDifferenceClass *class ) static void vips_colour_difference_init( VipsColourDifference *difference ) { -} + VipsColour *colour = VIPS_COLOUR( difference ); + colour->coding = VIPS_CODING_NONE; + colour->interpretation = VIPS_INTERPRETATION_B_W; + colour->format = VIPS_FORMAT_FLOAT; + colour->bands = 1; +} /* A colour-transforming function. */