From: Fabrice Bellard Date: Sat, 10 Oct 2026 14:26:23 +0000 (+0200) Subject: added JS_ToCStringNZ() and exported JS_ToUTF32String() X-Git-Url: https://git.kaiwu.me/?a=commitdiff_plain;h=a98785d0c9942b9f71bd2db8ef3f14539aa06279;p=quickjs.git added JS_ToCStringNZ() and exported JS_ToUTF32String() --- diff --git a/quickjs.c b/quickjs.c index 88504ca..639ab9e 100644 --- a/quickjs.c +++ b/quickjs.c @@ -4569,6 +4569,19 @@ const char *JS_ToCStringLen2(JSContext *ctx, size_t *plen, JSValueConst val1, BO return NULL; } +/* return an exception if the string contains a '\0' character */ +const char *JS_ToCStringNZ(JSContext *ctx, JSValueConst val1) +{ + size_t len; + const char *str = JS_ToCStringLen(ctx, &len, val1); + if (str && strlen(str) != len) { + JS_FreeCString(ctx, str); + JS_ThrowRangeError(ctx, "string contains embedded null character"); + return NULL; + } + return str; +} + void JS_FreeCString(JSContext *ctx, const char *ptr) { JSString *p; @@ -46752,7 +46765,7 @@ static JSValue js_string_toLowerCase(JSContext *ctx, JSValueConst this_val, #ifdef CONFIG_ALL_UNICODE /* return (-1, NULL) if exception, otherwise (len, buf) */ -static int JS_ToUTF32String(JSContext *ctx, uint32_t **pbuf, JSValueConst val1) +int JS_ToUTF32String(JSContext *ctx, uint32_t **pbuf, JSValueConst val1) { JSValue val; JSString *p; diff --git a/quickjs.h b/quickjs.h index 27750be..5ba86c7 100644 --- a/quickjs.h +++ b/quickjs.h @@ -766,7 +766,9 @@ static inline const char *JS_ToCString(JSContext *ctx, JSValueConst val1) { return JS_ToCStringLen2(ctx, NULL, val1, 0); } +const char *JS_ToCStringNZ(JSContext *ctx, JSValueConst val1); void JS_FreeCString(JSContext *ctx, const char *ptr); +int JS_ToUTF32String(JSContext *ctx, uint32_t **pbuf, JSValueConst val); JSValue JS_NewSymbol(JSContext *ctx, const char *description, JS_BOOL is_global);