Skip to content

Commit 18f122a

Browse files
committed
[minor] Support buffers greater than 2^32 bytes in length
1 parent 321fbe4 commit 18f122a

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

src/bufferutil.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ napi_value Mask(napi_env env, napi_callback_info info) {
1313
uint8_t *source;
1414
uint8_t *mask;
1515
uint8_t *destination;
16-
uint32_t offset;
17-
uint32_t length;
16+
int64_t offset;
17+
int64_t length;
1818

1919
status = napi_get_buffer_info(env, argv[0], (void **)&source, NULL);
2020
assert(status == napi_ok);
@@ -25,19 +25,19 @@ napi_value Mask(napi_env env, napi_callback_info info) {
2525
status = napi_get_buffer_info(env, argv[2], (void **)&destination, NULL);
2626
assert(status == napi_ok);
2727

28-
status = napi_get_value_uint32(env, argv[3], &offset);
28+
status = napi_get_value_int64(env, argv[3], &offset);
2929
assert(status == napi_ok);
3030

31-
status = napi_get_value_uint32(env, argv[4], &length);
31+
status = napi_get_value_int64(env, argv[4], &length);
3232
assert(status == napi_ok);
3333

3434
destination += offset;
35-
uint32_t index = 0;
35+
uint8_t index = 0;
3636

3737
//
3838
// Alignment preamble.
3939
//
40-
while (index < length && ((size_t)source % 8)) {
40+
while (index < length && (size_t)source % 8) {
4141
*destination++ = *source++ ^ mask[index % 4];
4242
index++;
4343
}
@@ -58,12 +58,12 @@ napi_value Mask(napi_env env, napi_callback_info info) {
5858
//
5959
// Apply 64 bit mask in 8 byte chunks.
6060
//
61-
uint32_t loop = length / 8;
61+
int64_t loop = length / 8;
6262
uint64_t mask8 = ((uint64_t *)maskAlignedArray)[0];
6363
uint64_t *pFrom8 = (uint64_t *)source;
6464
uint64_t *pTo8 = (uint64_t *)destination;
6565

66-
for (uint32_t i = 0; i < loop; i++) {
66+
for (int64_t i = 0; i < loop; i++) {
6767
pTo8[i] = pFrom8[i] ^ mask8;
6868
}
6969

@@ -74,7 +74,7 @@ napi_value Mask(napi_env env, napi_callback_info info) {
7474
source += 8 * loop;
7575
destination += 8 * loop;
7676

77-
for (uint32_t i = 0; i < length; i++) {
77+
for (uint8_t i = 0; i < length; i++) {
7878
destination[i] = source[i] ^ maskAlignedArray[i];
7979
}
8080

@@ -99,12 +99,12 @@ napi_value Unmask(napi_env env, napi_callback_info info) {
9999
status = napi_get_buffer_info(env, argv[1], (void **)&mask, NULL);
100100
assert(status == napi_ok);
101101

102-
uint32_t index = 0;
102+
uint8_t index = 0;
103103

104104
//
105105
// Alignment preamble.
106106
//
107-
while (index < length && ((size_t)source % 8)) {
107+
while (index < length && (size_t)source % 8) {
108108
*source++ ^= mask[index % 4];
109109
index++;
110110
}
@@ -125,11 +125,11 @@ napi_value Unmask(napi_env env, napi_callback_info info) {
125125
//
126126
// Apply 64 bit mask in 8 byte chunks.
127127
//
128-
uint32_t loop = length / 8;
128+
size_t loop = length / 8;
129129
uint64_t mask8 = ((uint64_t *)maskAlignedArray)[0];
130130
uint64_t *pSource8 = (uint64_t *)source;
131131

132-
for (uint32_t i = 0; i < loop; i++) {
132+
for (size_t i = 0; i < loop; i++) {
133133
pSource8[i] ^= mask8;
134134
}
135135

@@ -139,7 +139,7 @@ napi_value Unmask(napi_env env, napi_callback_info info) {
139139
length %= 8;
140140
source += 8 * loop;
141141

142-
for (uint32_t i = 0; i < length; i++) {
142+
for (uint8_t i = 0; i < length; i++) {
143143
source[i] ^= maskAlignedArray[i];
144144
}
145145

0 commit comments

Comments
 (0)