Я пишу расширение imagemagick для узла, и когда я пытаюсь сохранить BLOB-объект в буфер, я получаю Ошибка сегментации.
using Magick::Blob;
using v8::MaybeLocal;
using v8::Object;
Isolate *isolate = args.GetIsolate();
NodeMagick *obj = ObjectWrap::Unwrap<NodeMagick>(args.Holder());
Blob blob;
obj->image.write(&blob);
MaybeLocal<Object> buffer = node::Buffer::New(isolate, (char *)blob.data(), node::encoding::UTF8);
Если я распечатываю Blob, я получаю некоторые данные, но не все …
printf((char*)blob.data());
// Displays:
// ëPNG
Я не совсем уверен, почему это происходит. Мои данные не сохраняются полностью в BLOB-объект?
Если я изменю obj->image.write(&blob);
в obj->image.write("out.png");
и удалите buffer = ...
файл создается и доступен для просмотра, так что мне здесь не хватает с Blob?
Как указано в комментариях, вы должны сказать Node’s Buffer
насколько большой размер капли.
Blob blob;
obj->image.write(&blob)
MaybeLocal<Object> buffer = node::Buffer::Copy(isolate,
(char *)blob.data(),
blob.length());
Глядя на node_buffer.h
файла, может быть более целесообразным использовать node::Buffer::Copy
конструктор, или рискуйте дополнительными ошибками во время освобождения.
Других решений пока нет …