diff --git a/frameworks/native/backup_ext/src/tar_file.cpp b/frameworks/native/backup_ext/src/tar_file.cpp index 4aa61f8504f6d16f59cfb6d9fe68781a32a7bd2e..e0123782037d8dba2f6cfaf1c2e301b5502f573e 100644 --- a/frameworks/native/backup_ext/src/tar_file.cpp +++ b/frameworks/native/backup_ext/src/tar_file.cpp @@ -419,8 +419,12 @@ int TarFile::WriteTarHeader(TarHeader &header) int TarFile::WriteAll(const vector &buf, size_t len) { size_t count = 0; - while (count < len) { - auto i = fwrite(&buf[0] + count, sizeof(char), len - count, currentTarFile_); + size_t endLen = buf.size(); + if (endLen > len) { + endLen = len; + } + while (count < endLen) { + auto i = fwrite(&buf[0] + count, sizeof(char), endLen - count, currentTarFile_); if (i < 1) { HILOGE("Failed to fwrite tar file, err = %{public}d", errno); return count;