]> git.kaiwu.me - quickjs.git/commitdiff
Fix endianness handling in `js_dataview_getValue` / `js_dataview_setValue`
authorCharlie Gordon <github@chqrlie.org>
Sat, 23 Mar 2024 12:19:04 +0000 (13:19 +0100)
committerCharlie Gordon <github@chqrlie.org>
Sat, 23 Mar 2024 12:19:04 +0000 (13:19 +0100)
quickjs.c

index bd0c9e3e7221b1ae78dd7efd3efe242258e8954d..e8fdd8aa7b01aae803b0c12eb8fafe9771fedbad 100644 (file)
--- a/quickjs.c
+++ b/quickjs.c
@@ -55157,7 +55157,8 @@ static JSValue js_dataview_getValue(JSContext *ctx,
 {
     JSTypedArray *ta;
     JSArrayBuffer *abuf;
-    int is_swap, size;
+    BOOL littleEndian, is_swap;
+    int size;
     uint8_t *ptr;
     uint32_t v;
     uint64_t pos;
@@ -55168,9 +55169,8 @@ static JSValue js_dataview_getValue(JSContext *ctx,
     size = 1 << typed_array_size_log2(class_id);
     if (JS_ToIndex(ctx, &pos, argv[0]))
         return JS_EXCEPTION;
-    is_swap = TRUE;
-    if (argc > 1)
-        is_swap = !JS_ToBool(ctx, argv[1]);
+    littleEndian = argc > 1 && JS_ToBool(ctx, argv[1]);
+    is_swap = littleEndian ^ !is_be();
     abuf = ta->buffer->u.array_buffer;
     if (abuf->detached)
         return JS_ThrowTypeErrorDetachedArrayBuffer(ctx);
@@ -55255,7 +55255,8 @@ static JSValue js_dataview_setValue(JSContext *ctx,
 {
     JSTypedArray *ta;
     JSArrayBuffer *abuf;
-    int is_swap, size;
+    BOOL littleEndian, is_swap;
+    int size;
     uint8_t *ptr;
     uint64_t v64;
     uint32_t v;
@@ -55294,9 +55295,8 @@ static JSValue js_dataview_setValue(JSContext *ctx,
             v64 = u.u64;
         }
     }
-    is_swap = TRUE;
-    if (argc > 2)
-        is_swap = !JS_ToBool(ctx, argv[2]);
+    littleEndian = argc > 2 && JS_ToBool(ctx, argv[2]);
+    is_swap = littleEndian ^ !is_be();
     abuf = ta->buffer->u.array_buffer;
     if (abuf->detached)
         return JS_ThrowTypeErrorDetachedArrayBuffer(ctx);