[fix] stop iOS file transfers after read or seek failures

This commit is contained in:
dijunkun
2026-10-31 00:36:27 +08:00
parent dde5b57165
commit cd5e1c95d7
@@ -986,9 +986,12 @@ Params MakeParams(const RTCState &state, const std::string &user_id,
return; return;
} }
const off_t end = ftello(input); const off_t end = ftello(input);
rewind(input); if (end < 0 || fseeko(input, 0, SEEK_SET) != 0) {
finish(true);
return;
}
NSData *name_data = [fileName dataUsingEncoding:NSUTF8StringEncoding]; NSData *name_data = [fileName dataUsingEncoding:NSUTF8StringEncoding];
if (end < 0 || name_data.length == 0 || if (name_data.length == 0 ||
name_data.length > std::numeric_limits<uint16_t>::max()) { name_data.length > std::numeric_limits<uint16_t>::max()) {
finish(true); finish(true);
return; return;
@@ -1014,7 +1017,9 @@ Params MakeParams(const RTCState &state, const std::string &user_id,
const size_t bytes_read = to_read > 0 const size_t bytes_read = to_read > 0
? std::fread(payload.data(), 1, to_read, input) ? std::fread(payload.data(), 1, to_read, input)
: 0; : 0;
if (to_read > 0 && bytes_read == 0) { // A short read indicates EOF or an error. Stop before sending a partial
// chunk or reading again from a stream whose position may be invalid.
if (bytes_read != to_read) {
send_result = -1; send_result = -1;
break; break;
} }