mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
avoid segfault with unknown interpolator
This commit is contained in:
parent
6fc62d39c9
commit
8ac33aad69
@ -134,6 +134,9 @@ namespace sharp {
|
||||
*/
|
||||
int InterpolatorWindowSize(char const *name) {
|
||||
VipsInterpolate *interpolator = vips_interpolate_new(name);
|
||||
if (interpolator == NULL) {
|
||||
return -1;
|
||||
}
|
||||
int window_size = vips_interpolate_get_window_size(interpolator);
|
||||
g_object_unref(interpolator);
|
||||
return window_size;
|
||||
|
@ -261,6 +261,9 @@ class ResizeWorker : public NanAsyncWorker {
|
||||
|
||||
// Get window size of interpolator, used for determining shrink vs affine
|
||||
int interpolatorWindowSize = InterpolatorWindowSize(baton->interpolator.c_str());
|
||||
if (InterpolatorWindowSize < 0) {
|
||||
return Error();
|
||||
}
|
||||
|
||||
// Scaling calculations
|
||||
double xfactor = 1.0;
|
||||
@ -510,6 +513,9 @@ class ResizeWorker : public NanAsyncWorker {
|
||||
}
|
||||
// Create interpolator - "bilinear" (default), "bicubic" or "nohalo"
|
||||
VipsInterpolate *interpolator = vips_interpolate_new(baton->interpolator.c_str());
|
||||
if (interpolator == NULL) {
|
||||
return Error();
|
||||
}
|
||||
vips_object_local(hook, interpolator);
|
||||
// Perform affine transformation
|
||||
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