Check an edge case when read(2) returns 0

We might end up in an infinite loop if read(2) reached EOF unexpectedly.
The problematic code in uncrypt mentioned in the bug has been fixed
by switching to libbase ReadFully(). So I grepped through the recovery
code and fixed some other occurences of the issue.

Bug: 31073201
Change-Id: Ib867029158ba23363b8f85d61c25058a635c5a6b
This commit is contained in:
Tianjie Xu
2016-08-31 18:06:33 -07:00
parent 818394869d
commit 71e182bc38
3 changed files with 12 additions and 8 deletions

View File

@@ -336,6 +336,9 @@ int WriteToPartition(const unsigned char* data, size_t len, const char* target)
printf("verify read error %s at %zu: %s\n",
partition, p, strerror(errno));
return -1;
} else if (read_count == 0) {
printf("verify read reached unexpected EOF, %s at %zu\n", partition, p);
return -1;
}
if (static_cast<size_t>(read_count) < to_read) {
printf("short verify read %s at %zu: %zd %zu %s\n",