mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
Merge pull request #198 from bkw/unknownInterpolator
Runtime guard against unknown interpolator class, avoids segfault.
This commit is contained in:
commit
54f2243386
@ -134,6 +134,9 @@ namespace sharp {
|
|||||||
*/
|
*/
|
||||||
int InterpolatorWindowSize(char const *name) {
|
int InterpolatorWindowSize(char const *name) {
|
||||||
VipsInterpolate *interpolator = vips_interpolate_new(name);
|
VipsInterpolate *interpolator = vips_interpolate_new(name);
|
||||||
|
if (interpolator == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
int window_size = vips_interpolate_get_window_size(interpolator);
|
int window_size = vips_interpolate_get_window_size(interpolator);
|
||||||
g_object_unref(interpolator);
|
g_object_unref(interpolator);
|
||||||
return window_size;
|
return window_size;
|
||||||
|
@ -261,6 +261,9 @@ class ResizeWorker : public NanAsyncWorker {
|
|||||||
|
|
||||||
// Get window size of interpolator, used for determining shrink vs affine
|
// Get window size of interpolator, used for determining shrink vs affine
|
||||||
int interpolatorWindowSize = InterpolatorWindowSize(baton->interpolator.c_str());
|
int interpolatorWindowSize = InterpolatorWindowSize(baton->interpolator.c_str());
|
||||||
|
if (InterpolatorWindowSize < 0) {
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
|
||||||
// Scaling calculations
|
// Scaling calculations
|
||||||
double xfactor = 1.0;
|
double xfactor = 1.0;
|
||||||
@ -510,6 +513,9 @@ class ResizeWorker : public NanAsyncWorker {
|
|||||||
}
|
}
|
||||||
// Create interpolator - "bilinear" (default), "bicubic" or "nohalo"
|
// Create interpolator - "bilinear" (default), "bicubic" or "nohalo"
|
||||||
VipsInterpolate *interpolator = vips_interpolate_new(baton->interpolator.c_str());
|
VipsInterpolate *interpolator = vips_interpolate_new(baton->interpolator.c_str());
|
||||||
|
if (interpolator == NULL) {
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
vips_object_local(hook, interpolator);
|
vips_object_local(hook, interpolator);
|
||||||
// Perform affine transformation
|
// Perform affine transformation
|
||||||
VipsImage *affined;
|
VipsImage *affined;
|
||||||
|
@ -93,4 +93,16 @@ describe('Interpolation', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('unknown interpolator throws', function(done) {
|
||||||
|
sharp(fixtures.inputJpg)
|
||||||
|
.resize(320, 240)
|
||||||
|
.interpolateWith('nonexistant')
|
||||||
|
.toBuffer()
|
||||||
|
.catch(function (e) {
|
||||||
|
assert(
|
||||||
|
e.toString().match(/VipsInterpolate: class "nonexistant" not found/)
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.finally(done);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user