Check revoked file writes independently of cancellation callbacks
This commit is contained in:
1 parent
27eb0fa546
commit
33db6c909f
1 file changed
+5
-1
@@ -866,14 +866,18 @@ static int transfer_isolation(void) {
|
||||
check("FILE_TRANSFER revoke cancels B operation before callback", !transfers.pulls[1] && transfers.done[1] == 1 &&
|
||||
transfers.error[1] == -2 && !receiver->file_transfer->ops);
|
||||
etcp_router_set_receive_ready(receiver, ETCP_RT_ID_FILE_TRANSFER, NULL);
|
||||
etcp_router_resume_receive(receiver, 112, sender->node_id, ETCP_RT_ID_FILE_TRANSFER);
|
||||
REQUIRE(!send_routed(&saved, data, sizeof(data), ROUTE_CRYPTO_SIGN));
|
||||
uint8_t request[49] = {FT_REQUEST}; request[1] = 0x77; memcpy(request + 17, object, 16);
|
||||
uint64_t size = sizeof(bytes); memcpy(request + 33, &size, 8); saved.seq++;
|
||||
unsigned lookups = transfers.lookups;
|
||||
REQUIRE(!send_routed(&saved, request, sizeof(request), ROUTE_CRYPTO_SIGN));
|
||||
check("revoked signed FILE_TRANSFER REQUEST never reaches lookup", transfers.lookups == lookups);
|
||||
if (transfers.pulls[1]) REQUIRE(!fflush(transfers.pulls[1]->file));
|
||||
struct stat state; REQUIRE(!stat(paths[1], &state));
|
||||
check("revoked FILE_TRANSFER queue and late DATA cannot write destination", state.st_size == 0 && transfers.done[1] == 1);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "isolation revoked file bytes=%lld offset=%llu completions=%u", (long long)state.st_size,
|
||||
(unsigned long long)(transfers.pulls[1] ? transfers.pulls[1]->offset : 0), transfers.done[1]);
|
||||
check("revoked FILE_TRANSFER queue and late DATA cannot write destination", state.st_size == 0);
|
||||
/* Та же личная копия повторяется через разрешённую A с новым transfer ID. */
|
||||
if (transfers.pulls[1]) file_transfer_cancel(transfers.pulls[1]);
|
||||
transfers.done[1] = 0;
|
||||
|
||||
Reference in new issue
Block a user