Skip to content

Commit 4e16641

Browse files
authored
fix: Fix uses of cabi_realloc that were discarding their results (#811)
Fix issues in some host calls where a buffer length error was being handled by reallocating to the new buffer size, but was discarding the new buffer's pointer. This should also fix flaky tests in CI.
1 parent 1c21c9a commit 4e16641

File tree

2 files changed

+16
-16
lines changed

2 files changed

+16
-16
lines changed

runtime/fastly/host-api/component/fastly_world_adapter.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_cipher_openssl_name(
210210
auto status = fastly::req_downstream_tls_cipher_openssl_name(reinterpret_cast<char *>(ret->ptr),
211211
default_size, &ret->len);
212212
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
213-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
213+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
214214
status = fastly::req_downstream_tls_cipher_openssl_name(reinterpret_cast<char *>(ret->ptr),
215215
ret->len, &ret->len);
216216
}
@@ -224,7 +224,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_protocol(
224224
auto status = fastly::req_downstream_tls_protocol(reinterpret_cast<char *>(ret->ptr),
225225
default_size, &ret->len);
226226
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
227-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
227+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
228228
status = fastly::req_downstream_tls_protocol(reinterpret_cast<char *>(ret->ptr), ret->len,
229229
&ret->len);
230230
}
@@ -238,7 +238,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_raw_client_certificate(
238238
auto status =
239239
fastly::req_downstream_tls_raw_client_certificate(ret->ptr, default_size, &ret->len);
240240
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
241-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
241+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
242242
status = fastly::req_downstream_tls_raw_client_certificate(ret->ptr, ret->len, &ret->len);
243243
}
244244
return convert_result(status, err);
@@ -250,7 +250,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_ja3_md5(
250250
ret->ptr = static_cast<uint8_t *>(cabi_malloc(default_size, 4));
251251
auto status = fastly::req_downstream_tls_ja3_md5(ret->ptr, &ret->len);
252252
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
253-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
253+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
254254
status = fastly::req_downstream_tls_ja3_md5(ret->ptr, &ret->len);
255255
}
256256
return convert_result(status, err);
@@ -261,7 +261,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_client_hello(
261261
ret->ptr = static_cast<uint8_t *>(cabi_malloc(default_size, 4));
262262
auto status = fastly::req_downstream_tls_client_hello(ret->ptr, default_size, &ret->len);
263263
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
264-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
264+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
265265
status = fastly::req_downstream_tls_client_hello(ret->ptr, ret->len, &ret->len);
266266
}
267267
return convert_result(status, err);
@@ -1243,7 +1243,7 @@ bool fastly_compute_at_edge_cache_get_user_metadata(fastly_compute_at_edge_cache
12431243
auto status = fastly::cache_get_user_metadata(handle, reinterpret_cast<char *>(ret->ptr),
12441244
default_size, &ret->len);
12451245
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
1246-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
1246+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
12471247
status = fastly::cache_get_user_metadata(handle, reinterpret_cast<char *>(ret->ptr), ret->len,
12481248
&ret->len);
12491249
}
@@ -1387,10 +1387,10 @@ bool fastly_compute_at_edge_device_detection_lookup(
13871387
fastly::device_detection_lookup(reinterpret_cast<char *>(user_agent->ptr), user_agent->len,
13881388
reinterpret_cast<char *>(ret->ptr), default_size, &ret->len);
13891389
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
1390-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
1390+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
13911391
status =
13921392
fastly::device_detection_lookup(reinterpret_cast<char *>(user_agent->ptr), user_agent->len,
13931393
reinterpret_cast<char *>(ret->ptr), ret->len, &ret->len);
13941394
}
13951395
return convert_result(status, err);
1396-
}
1396+
}

runtime/js-compute-runtime/host_interface/component/fastly_world_adapter.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_cipher_openssl_name(
210210
auto status = fastly::req_downstream_tls_cipher_openssl_name(reinterpret_cast<char *>(ret->ptr),
211211
default_size, &ret->len);
212212
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
213-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
213+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
214214
status = fastly::req_downstream_tls_cipher_openssl_name(reinterpret_cast<char *>(ret->ptr),
215215
ret->len, &ret->len);
216216
}
@@ -224,7 +224,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_protocol(
224224
auto status = fastly::req_downstream_tls_protocol(reinterpret_cast<char *>(ret->ptr),
225225
default_size, &ret->len);
226226
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
227-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
227+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
228228
status = fastly::req_downstream_tls_protocol(reinterpret_cast<char *>(ret->ptr), ret->len,
229229
&ret->len);
230230
}
@@ -238,7 +238,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_raw_client_certificate(
238238
auto status =
239239
fastly::req_downstream_tls_raw_client_certificate(ret->ptr, default_size, &ret->len);
240240
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
241-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
241+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
242242
status = fastly::req_downstream_tls_raw_client_certificate(ret->ptr, ret->len, &ret->len);
243243
}
244244
return convert_result(status, err);
@@ -250,7 +250,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_ja3_md5(
250250
ret->ptr = static_cast<uint8_t *>(cabi_malloc(default_size, 4));
251251
auto status = fastly::req_downstream_tls_ja3_md5(ret->ptr, &ret->len);
252252
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
253-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
253+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
254254
status = fastly::req_downstream_tls_ja3_md5(ret->ptr, &ret->len);
255255
}
256256
return convert_result(status, err);
@@ -261,7 +261,7 @@ bool fastly_compute_at_edge_http_req_downstream_tls_client_hello(
261261
ret->ptr = static_cast<uint8_t *>(cabi_malloc(default_size, 4));
262262
auto status = fastly::req_downstream_tls_client_hello(ret->ptr, default_size, &ret->len);
263263
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
264-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
264+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
265265
status = fastly::req_downstream_tls_client_hello(ret->ptr, ret->len, &ret->len);
266266
}
267267
return convert_result(status, err);
@@ -1243,7 +1243,7 @@ bool fastly_compute_at_edge_cache_get_user_metadata(fastly_compute_at_edge_cache
12431243
auto status = fastly::cache_get_user_metadata(handle, reinterpret_cast<char *>(ret->ptr),
12441244
default_size, &ret->len);
12451245
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
1246-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
1246+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
12471247
status = fastly::cache_get_user_metadata(handle, reinterpret_cast<char *>(ret->ptr), ret->len,
12481248
&ret->len);
12491249
}
@@ -1387,10 +1387,10 @@ bool fastly_compute_at_edge_device_detection_lookup(
13871387
fastly::device_detection_lookup(reinterpret_cast<char *>(user_agent->ptr), user_agent->len,
13881388
reinterpret_cast<char *>(ret->ptr), default_size, &ret->len);
13891389
if (status == FASTLY_COMPUTE_AT_EDGE_TYPES_ERROR_BUFFER_LEN) {
1390-
cabi_realloc(ret->ptr, default_size, 4, ret->len);
1390+
ret->ptr = static_cast<uint8_t *>(cabi_realloc(ret->ptr, default_size, 4, ret->len));
13911391
status =
13921392
fastly::device_detection_lookup(reinterpret_cast<char *>(user_agent->ptr), user_agent->len,
13931393
reinterpret_cast<char *>(ret->ptr), ret->len, &ret->len);
13941394
}
13951395
return convert_result(status, err);
1396-
}
1396+
}

0 commit comments

Comments
 (0)