Sophie

Sophie

distrib > Mageia > cauldron > x86_64 > media > core-release-src > by-pkgid > 4c532bfb9916518564da5ba2805999f5 > files > 84

qtbase5-5.15.12-3.mga10.src.rpm

From 05599f5769188731199ddb370ec270bccf0f7c6a Mon Sep 17 00:00:00 2001
From: Ahmad Samir <a.samirh78@gmail.com>
Date: Wed, 8 Mar 2023 13:49:21 +0200
Subject: [PATCH 085/147] QFSFileEngine: fix overflow bug when using lseek64

QT_LSEEK (lseek64()) returns QT_OFF_T, which is off64_t on 32bit
systems. The return from the lseek64() call was being assigned to an
int, which meant that if the returned value is > INT_MAX it will
overflow and the value becomes -1, and since errno would be EOVERFLOW
the code would fail to open the file.

Fix the issue by assigning the return value to QT_OFF_T.

Thanks to Giuseppe for pointing out the issue in the code review.

Found by compiling with -Wshorten-64-to-32.

[ChangeLog][QtCore][QFile] Fixed a bug where opening a file in append
mode may fail if the file size was bigger than INT_MAX.

Pick-to: 6.5 6.4 6.2 5.15
Change-Id: Iad33e3192f37466643a1218d38e5ecc2baaa7dc9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit 5bffb47d6e45260953bc679e1e9582322064b753)
---
 src/corelib/io/qfsfileengine.cpp      | 2 +-
 src/corelib/io/qfsfileengine_unix.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index 3042eac2f0..a862ce9166 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -361,7 +361,7 @@ bool QFSFileEnginePrivate::openFd(QIODevice::OpenMode openMode, int fd)
 
     // Seek to the end when in Append mode.
     if (openMode & QFile::Append) {
-        int ret;
+        QT_OFF_T ret;
         do {
             ret = QT_LSEEK(fd, 0, SEEK_END);
         } while (ret == -1 && errno == EINTR);
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 4610e9306c..65e921c15a 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -141,7 +141,7 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode)
 
         // Seek to the end when in Append mode.
         if (flags & QFile::Append) {
-            int ret;
+            QT_OFF_T ret;
             do {
                 ret = QT_LSEEK(fd, 0, SEEK_END);
             } while (ret == -1 && errno == EINTR);
-- 
2.40.1