[PATCH 1/3] server: fix some error detection
Eric Pouech
eric.pouech at gmail.com
Tue Mar 8 10:43:44 CST 2022
Signed-off-by: Eric Pouech <eric.pouech at gmail.com>
---
server/mapping.c | 4 ++--
server/request.c | 3 ++-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/server/mapping.c b/server/mapping.c
index 8d4332d240f..6b0785c1c0c 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -691,13 +691,13 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s
if (!file_size) return STATUS_INVALID_FILE_FOR_SECTION;
size = pread( unix_fd, &mz, sizeof(mz), 0 );
- if (size < sizeof(mz.dos)) return STATUS_INVALID_IMAGE_NOT_MZ;
+ if (size < 0 || size < sizeof(mz.dos)) return STATUS_INVALID_IMAGE_NOT_MZ;
if (mz.dos.e_magic != IMAGE_DOS_SIGNATURE) return STATUS_INVALID_IMAGE_NOT_MZ;
mz_size = size;
pos = mz.dos.e_lfanew;
size = pread( unix_fd, &nt, sizeof(nt), pos );
- if (size < sizeof(nt.Signature) + sizeof(nt.FileHeader)) return STATUS_INVALID_IMAGE_PROTECT;
+ if (size < 0 || size < sizeof(nt.Signature) + sizeof(nt.FileHeader)) return STATUS_INVALID_IMAGE_PROTECT;
/* zero out Optional header in the case it's not present or partial */
opt_size = max( nt.FileHeader.SizeOfOptionalHeader, offsetof( IMAGE_OPTIONAL_HEADER32, CheckSum ));
size = min( size, sizeof(nt.Signature) + sizeof(nt.FileHeader) + opt_size );
diff --git a/server/request.c b/server/request.c
index 7021741c765..1bc92d479ae 100644
--- a/server/request.c
+++ b/server/request.c
@@ -265,7 +265,8 @@ static void send_reply( union generic_reply *reply )
vec[1].iov_base = current->reply_data;
vec[1].iov_len = current->reply_size;
- if ((ret = writev( get_unix_fd( current->reply_fd ), vec, 2 )) < sizeof(*reply)) goto error;
+ ret = writev( get_unix_fd( current->reply_fd ), vec, 2 );
+ if (ret < 0 || ret < sizeof(*reply)) goto error;
if ((current->reply_towrite = current->reply_size - (ret - sizeof(*reply))))
{
More information about the wine-devel
mailing list