diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2021-10-13 18:26:43 +0200 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2021-10-14 17:09:20 +0200 |
commit | f83a3c4b6e703d3d6b48f2f8d2f71ab69c084b8f (patch) | |
tree | 1a73157447885108fa0e1a710599ebc9ef77196a /src/corelib/time/qtimezoneprivate_icu.cpp | |
parent | dbc434dc090df6c475a336cb95e3524150ca7bae (diff) |
Convert Latin1 to UTF-16 before passing to ICU API
The ICU UChar type is a UTF-16 type, not a single-byte type, so
passing it the data() of a QByteArray representing an ID is misguided.
Fixes: QTBUG-97486
Pick-to: 6.2 6.2.1
Change-Id: I6789f491674b1d913eb8655d788b497e2fc06f7a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/time/qtimezoneprivate_icu.cpp')
-rw-r--r-- | src/corelib/time/qtimezoneprivate_icu.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/corelib/time/qtimezoneprivate_icu.cpp b/src/corelib/time/qtimezoneprivate_icu.cpp index 503c040d69..798f231219 100644 --- a/src/corelib/time/qtimezoneprivate_icu.cpp +++ b/src/corelib/time/qtimezoneprivate_icu.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 John Layt <jlayt@kde.org> +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -264,11 +265,10 @@ static QList<QByteArray> uenumToIdList(UEnumeration *uenum) static int ucalDaylightOffset(const QByteArray &id) { UErrorCode status = U_ZERO_ERROR; - const int32_t dstMSecs = ucal_getDSTSavings(reinterpret_cast<const UChar *>(id.data()), &status); - if (U_SUCCESS(status)) - return (dstMSecs / 1000); - else - return 0; + const QString utf16 = QString::fromLatin1(id); + const int32_t dstMSecs = ucal_getDSTSavings( + reinterpret_cast<const UChar *>(utf16.data()), &status); + return U_SUCCESS(status) ? dstMSecs / 1000 : 0; } // Create the system default time zone |