From 323aa2675a05fbaa61ff529e32f1766109c592ee Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Fri, 31 Aug 2018 16:52:44 +0200 Subject: [PATCH] src: warn about odd UTF-16 decoding function signature Using a `uint16_t` sequence for UTF-16 processing would typically imply that the sequence already contains the correct 16-bit code units. However, our API does not account for that. The previous comments were somewhat misleading, since endianness is typically applied to sequences of bytes, which is not something that this API works with. PR-URL: https://github.com/nodejs/node/pull/22623 Reviewed-By: Colin Ihrig --- src/node.h | 3 ++- src/string_bytes.h | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/node.h b/src/node.h index e3dd901718e8f5..2429e45936b572 100644 --- a/src/node.h +++ b/src/node.h @@ -424,7 +424,8 @@ NODE_EXTERN v8::Local Encode(v8::Isolate* isolate, size_t len, enum encoding encoding = LATIN1); -// The input buffer should be in host endianness. +// Warning: This reverses endianness on Big Endian platforms, even though the +// signature using uint16_t implies that it should not. NODE_EXTERN v8::Local Encode(v8::Isolate* isolate, const uint16_t* buf, size_t len); diff --git a/src/string_bytes.h b/src/string_bytes.h index 8280e37987755c..9e64fa0ee5f90a 100644 --- a/src/string_bytes.h +++ b/src/string_bytes.h @@ -97,7 +97,10 @@ class StringBytes { enum encoding encoding, v8::Local* error); - // The input buffer should be in host endianness. + // Warning: This reverses endianness on BE platforms, even though the + // signature using uint16_t implies that it should not. + // However, the brokenness is already public API and can't therefore + // be changed easily. static v8::MaybeLocal Encode(v8::Isolate* isolate, const uint16_t* buf, size_t buflen,