Merge pull request #2163 from kibao/fix/node-segmentation-fault

node.js segmentation fault when image couldn't be loaded
This commit is contained in:
Juriy Zaytsev 2015-05-13 11:47:06 -04:00
commit ca50ab90a5
2 changed files with 30 additions and 4 deletions

View file

@ -50,6 +50,7 @@
else {
fabric.log(err.message);
}
callback(null);
});
req.end();
@ -71,10 +72,16 @@
fabric.util.loadImage = function(url, callback, context) {
function createImageAndCallBack(data) {
img.src = new Buffer(data, 'binary');
// preserving original url, which seems to be lost in node-canvas
img._src = url;
callback && callback.call(context, img);
if (data) {
img.src = new Buffer(data, 'binary');
// preserving original url, which seems to be lost in node-canvas
img._src = url;
callback && callback.call(context, img);
}
else {
img = null;
callback && callback.call(context, null, true);
}
}
var img = new Image();
if (url && (url instanceof Buffer || url.indexOf('data') === 0)) {

View file

@ -24,6 +24,8 @@
? require("path").join(__dirname, '../fixtures/', 'very_large_image.jpg')
: getAbsolutePath('../fixtures/very_large_image.jpg');
var IMG_URL_NON_EXISTING = 'http://www.google.com/non-existing';
test('fabric.util.toFixed', function(){
ok(typeof fabric.util.toFixed == 'function');
@ -459,6 +461,23 @@
}, 1000);
});
asyncTest('fabric.util.loadImage with url for a non exsiting image', function() {
var callbackInvoked = false;
var hadError = false;
fabric.util.loadImage(IMG_URL_NON_EXISTING, function(img, error) {
callbackInvoked = true;
hadError = error;
});
setTimeout(function() {
ok(callbackInvoked, 'callback should be invoked');
equal(hadError, true, 'callback should be invoked with error set to true');
start();
}, 1000);
});
var SVG_WITH_1_ELEMENT = '<?xml version="1.0"?>\
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\