Skip to content

Commit c1d99bd

Browse files
authored
Fix dangling env pointer in image MIME data cleanup (#2551)
* Copy NAPI env instead of referencing member * Add changelog entry
1 parent 41adf08 commit c1d99bd

File tree

2 files changed

+5
-7
lines changed

2 files changed

+5
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ project adheres to [Semantic Versioning](http://semver.org/).
1010
### Changed
1111
### Added
1212
### Fixed
13+
* Fix dangling env pointer in image MIME data cleanup (#2550)
1314

1415
3.2.1
1516
==================

src/Image.cc

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ struct canvas_jpeg_error_mgr: jpeg_error_mgr {
3838
*/
3939

4040
typedef struct {
41-
Napi::Env* env;
41+
Napi::Env env;
4242
unsigned len;
4343
uint8_t *buf;
4444
} read_closure_t;
@@ -335,10 +335,7 @@ Image::loadFromBuffer(uint8_t *buf, unsigned len) {
335335

336336
cairo_status_t
337337
Image::loadPNGFromBuffer(uint8_t *buf) {
338-
read_closure_t closure;
339-
closure.len = 0;
340-
closure.buf = buf;
341-
closure.env = &env;
338+
read_closure_t closure{ env, 0, buf };
342339
_surface = cairo_image_surface_create_from_png_stream(readPNG, &closure);
343340
cairo_status_t status = cairo_surface_status(_surface);
344341
if (status) return status;
@@ -1007,7 +1004,7 @@ Image::decodeJPEGBufferIntoMimeSurface(uint8_t *buf, unsigned len) {
10071004
void
10081005
clearMimeData(void *closure) {
10091006
Napi::MemoryManagement::AdjustExternalMemory(
1010-
*static_cast<read_closure_t *>(closure)->env,
1007+
static_cast<read_closure_t *>(closure)->env,
10111008
-static_cast<int>((static_cast<read_closure_t *>(closure)->len)));
10121009
free(static_cast<read_closure_t *>(closure)->buf);
10131010
free(closure);
@@ -1036,7 +1033,7 @@ Image::assignDataAsMime(uint8_t *data, int len, const char *mime_type) {
10361033

10371034
memcpy(mime_data, data, len);
10381035

1039-
mime_closure->env = &env;
1036+
mime_closure->env = env;
10401037
mime_closure->buf = mime_data;
10411038
mime_closure->len = len;
10421039

0 commit comments

Comments
 (0)