summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/time/qtimezoneprivate_tz.cpp22
-rw-r--r--src/gui/image/qimage.cpp15
2 files changed, 24 insertions, 13 deletions
diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp
index dd3dae78e9..1b0892d062 100644
--- a/src/corelib/time/qtimezoneprivate_tz.cpp
+++ b/src/corelib/time/qtimezoneprivate_tz.cpp
@@ -1187,8 +1187,11 @@ public:
*/
const StatIdent local = identify("/etc/localtime");
const StatIdent tz = identify("/etc/TZ");
- if (!m_name.isEmpty() && m_last.isValid() && (m_last == local || m_last == tz))
+ const StatIdent timezone = identify("/etc/timezone");
+ if (!m_name.isEmpty() && m_last.isValid()
+ && (m_last == local || m_last == tz || m_last == timezone)) {
return m_name;
+ }
m_name = etcLocalTime();
if (!m_name.isEmpty()) {
@@ -1196,12 +1199,19 @@ public:
return m_name;
}
- m_name = etcTZ();
- m_last = m_name.isEmpty() ? StatIdent() : tz;
+ // Some systems (e.g. uClibc) have a default value for $TZ in /etc/TZ:
+ m_name = etcContent(QStringLiteral("/etc/TZ"));
+ if (!m_name.isEmpty()) {
+ m_last = tz;
+ return m_name;
+ }
+
+ // Gentoo still (2020, QTBUG-87326) uses this:
+ m_name = etcContent(QStringLiteral("/etc/timezone"));
+ m_last = m_name.isEmpty() ? StatIdent() : timezone;
return m_name;
}
-
private:
QByteArray m_name;
struct StatIdent
@@ -1242,10 +1252,8 @@ private:
return QByteArray();
}
- static QByteArray etcTZ()
+ static QByteArray etcContent(const QString &path)
{
- // Some systems (e.g. uClibc) have a default value for $TZ in /etc/TZ:
- const QString path = QStringLiteral("/etc/TZ");
QFile zone(path);
if (zone.open(QIODevice::ReadOnly))
return zone.readAll().trimmed();
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index a351b72072..8011aa2eb5 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -126,7 +126,7 @@ QImageData::QImageData()
*/
QImageData * QImageData::create(const QSize &size, QImage::Format format)
{
- if (size.isEmpty() || format == QImage::Format_Invalid)
+ if (size.isEmpty() || format <= QImage::Format_Invalid || format >= QImage::NImageFormats)
return nullptr; // invalid parameter(s)
Q_TRACE_SCOPE(QImageData_create, size, format);
@@ -791,7 +791,7 @@ QImage::QImage(const QSize &size, Format format)
QImageData *QImageData::create(uchar *data, int width, int height, qsizetype bpl, QImage::Format format, bool readOnly, QImageCleanupFunction cleanupFunction, void *cleanupInfo)
{
- if (width <= 0 || height <= 0 || !data || format == QImage::Format_Invalid)
+ if (width <= 0 || height <= 0 || !data || format <= QImage::Format_Invalid || format >= QImage::NImageFormats)
return nullptr;
const int depth = qt_depthForFormat(format);
@@ -2072,7 +2072,7 @@ QImage QImage::convertToFormat_helper(Format format, Qt::ImageConversionFlags fl
if (!d || d->format == format)
return *this;
- if (format == Format_Invalid || d->format == Format_Invalid)
+ if (d->format == Format_Invalid || format <= Format_Invalid || format >= NImageFormats)
return QImage();
const QPixelLayout *destLayout = &qPixelLayouts[format];
@@ -2202,7 +2202,7 @@ QImage QImage::convertToFormat(Format format, const QList<QRgb> &colorTable, Qt:
if (!d || d->format == format)
return *this;
- if (format == QImage::Format_Invalid)
+ if (format <= QImage::Format_Invalid || format >= QImage::NImageFormats)
return QImage();
if (format <= QImage::Format_Indexed8)
return convertWithPalette(convertToFormat(QImage::Format_ARGB32, flags), format, colorTable);
@@ -2268,7 +2268,10 @@ bool QImage::reinterpretAsFormat(Format format)
void QImage::convertTo(Format format, Qt::ImageConversionFlags flags)
{
- if (!d || format == QImage::Format_Invalid || d->format == format)
+ if (!d || format <= QImage::Format_Invalid || format >= QImage::NImageFormats)
+ return;
+
+ if (d->format == format)
return;
detach();
@@ -5336,7 +5339,7 @@ QPixelFormat QImage::pixelFormat() const noexcept
*/
QPixelFormat QImage::toPixelFormat(QImage::Format format) noexcept
{
- Q_ASSERT(static_cast<int>(format) < NImageFormats);
+ Q_ASSERT(static_cast<int>(format) < NImageFormats && static_cast<int>(format) >= 0);
return pixelformats[format];
}