} qjs_module_t;
+#define QJS_BUFFER_MAX_LENGTH INT32_MAX
+
+
JSContext *qjs_new_context(JSRuntime *rt, qjs_module_t **addons);
JSValue qjs_call_exit_hook(JSContext *ctx);
void *qjs_chb_ctx_alloc(void *ctx, size_t size);
JSValue qjs_new_array_buffer(JSContext *cx, uint8_t *src, size_t len);
JSValue qjs_new_external_array_buffer(JSContext *cx, uint8_t *src, size_t len,
int is_shared);
-JSValue qjs_buffer_alloc(JSContext *ctx, size_t size);
+JSValue qjs_buffer_alloc(JSContext *ctx, uint64_t size);
JSValue qjs_buffer_create(JSContext *ctx, u_char *start, size_t size);
JSValue qjs_buffer_chb_alloc(JSContext *ctx, njs_chb_t *chain);
static const JSCFunctionListEntry qjs_buffer_constants[] = {
- JS_PROP_INT32_DEF("MAX_LENGTH", INT32_MAX, JS_PROP_ENUMERABLE),
+ JS_PROP_INT32_DEF("MAX_LENGTH", QJS_BUFFER_MAX_LENGTH, JS_PROP_ENUMERABLE),
JS_PROP_INT32_DEF("MAX_STRING_LENGTH", 0x3fffffff, JS_PROP_ENUMERABLE),
};
JSValue
-qjs_buffer_alloc(JSContext *ctx, size_t size)
+qjs_buffer_alloc(JSContext *ctx, uint64_t size)
{
JSValue ret, proto, value;
+ if (size > QJS_BUFFER_MAX_LENGTH) {
+ return JS_ThrowRangeError(ctx, "invalid array buffer length");
+ }
+
value = JS_NewInt64(ctx, size);
ret = qjs_new_uint8_array(ctx, 1, &value);