diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/time/qtimezoneprivate_tz.cpp | 22 | ||||
-rw-r--r-- | src/gui/image/qimage.cpp | 15 |
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]; } |