diff --git a/releases/releases.yaml b/releases/releases.yaml index 445cc80e8d..f5d78f1937 100644 --- a/releases/releases.yaml +++ b/releases/releases.yaml @@ -1363,3 +1363,4 @@ duktape_releases: - "Fix duk_suspend() handling of finalizers, if main thread was suspended finalizers triggered by other threads could consistenly fail (GH-2282)" - "Improve DUK_USE_OS_STRING for macOS, iOS, watchOS, and tvOS (GH-2288)" - "Fix nested error handling bug for out-of-memory during error creation (GH-2278, GH-2290)" + - "Fix failing assert for CBOR.encode() when argument is a zero-size dynamic plain array (GH-2316, GH-2318)" diff --git a/src-input/duk_bi_cbor.c b/src-input/duk_bi_cbor.c index f12f79521c..021e5ccbc9 100644 --- a/src-input/duk_bi_cbor.c +++ b/src-input/duk_bi_cbor.c @@ -487,7 +487,7 @@ DUK_LOCAL void duk__cbor_encode_object(duk_cbor_encode_context *enc_ctx) { duk__cbor_encode_uint32(enc_ctx, (duk_uint32_t) len, 0x40U); duk__cbor_encode_ensure(enc_ctx, len); p = enc_ctx->ptr; - duk_memcpy((void *) p, (const void *) buf, len); + duk_memcpy_unsafe((void *) p, (const void *) buf, len); p += len; enc_ctx->ptr = p; } else { @@ -542,7 +542,7 @@ DUK_LOCAL void duk__cbor_encode_buffer(duk_cbor_encode_context *enc_ctx) { duk__cbor_encode_uint32(enc_ctx, (duk_uint32_t) len, 0x40U); duk__cbor_encode_ensure(enc_ctx, len); p = enc_ctx->ptr; - duk_memcpy((void *) p, (const void *) buf, len); + duk_memcpy_unsafe((void *) p, (const void *) buf, len); p += len; enc_ctx->ptr = p; } @@ -945,9 +945,7 @@ DUK_LOCAL void duk__cbor_decode_join_buffers(duk_cbor_decode_context *dec_ctx, d buf_data = (duk_uint8_t *) duk_require_buffer(dec_ctx->thr, idx, &buf_size); if (p != NULL) { - if (buf_size > 0U) { - duk_memcpy((void *) p, (const void *) buf_data, buf_size); - } + duk_memcpy_unsafe((void *) p, (const void *) buf_data, buf_size); p += buf_size; } else { total_size += buf_size; diff --git a/tests/ecmascript/test-bug-assert-cbor-encode-gh2316.js b/tests/ecmascript/test-bug-assert-cbor-encode-gh2316.js new file mode 100644 index 0000000000..30793ab80e --- /dev/null +++ b/tests/ecmascript/test-bug-assert-cbor-encode-gh2316.js @@ -0,0 +1,13 @@ +// https://github.com/svaarala/duktape/issues/2316 + +/*=== +done +===*/ + +function main() { + var v0 = []; + var v4 = Duktape.dec("base64",v0); + var v5 = CBOR.encode(v4); +} +main(); +print('done');