path: root/lib
diff options
authorDavid Oberhollenzer <>2020-01-24 23:59:47 +0100
committerDavid Oberhollenzer <>2020-02-09 22:13:18 +0100
commit83c675ac9aed767e4431a5bbc25f3ccd7f77cf84 (patch)
treef151bebe21be05baf8dffc30c1b3bdf912320f88 /lib
parent7d40c1a1420bc95af20624aa22e254a8eb3356f0 (diff)
mtd-utils: Fix "are we really at EOF" test logic in libubi read_data
The function reads file data into a buffer and then checks if we actually are at the end-of-file by trying to read one more byte. For whatever reason, the code uses an int instead of a char. It's not pretty but works. But again, this is something that every static analysis tool barks at. Further more, the error messages are inverted. "We aren't at EOF yet" is printed on failure and something like "read error %m" is printed on success. This patch fixes all of the above. Signed-off-by: David Oberhollenzer <>
Diffstat (limited to 'lib')
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/libubi.c b/lib/libubi.c
index aaeeb38..afe3648 100644
--- a/lib/libubi.c
+++ b/lib/libubi.c
@@ -156,7 +156,8 @@ static int read_positive_int(const char *file, int *value)
static int read_data(const char *file, void *buf, int buf_len)
- int fd, rd, tmp, tmp1;
+ int fd, rd, tmp1;
+ char tmp;
fd = open(file, O_RDONLY);
if (fd == -1)
@@ -178,11 +179,11 @@ static int read_data(const char *file, void *buf, int buf_len)
/* Make sure all data is read */
tmp1 = read(fd, &tmp, 1);
- if (tmp1 == 1) {
+ if (tmp1 < 0) {
sys_errmsg("cannot read \"%s\"", file);
goto out_error;
- if (tmp1) {
+ if (tmp1 > 0) {
errmsg("file \"%s\" contains too much data (> %d bytes)",
file, buf_len);
errno = EINVAL;