diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2018-11-15 16:38:12 +0100 |
---|---|---|
committer | Andreas Buhr <andreas.buhr@qt.io> | 2020-11-19 12:28:45 +0100 |
commit | 28e4a8421ca618097bf8de35dab17ffbd423e468 (patch) | |
tree | 859c73fc8fa982491f73ac3fddf8889f20ff2835 /tests/libfuzzer | |
parent | 5126e461a22cd076cb3d0516500a4f3a06b50dac (diff) |
Fuzzing: Add a test for QDateTime::fromString
This patch adds a basic fuzzing test for
QDateTime::fromString.
Task-number: QTBUG-87104
Pick-to: 5.15
Change-Id: Icc51386f06f6d4d2a4495734f7fa45de80c6e065
Reviewed-by: Robert Loehning <robert.loehning@qt.io>
Diffstat (limited to 'tests/libfuzzer')
-rw-r--r-- | tests/libfuzzer/corelib/time/qdatetime/fromstring/fromstring.pro | 10 | ||||
-rw-r--r-- | tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp | 100 |
2 files changed, 110 insertions, 0 deletions
diff --git a/tests/libfuzzer/corelib/time/qdatetime/fromstring/fromstring.pro b/tests/libfuzzer/corelib/time/qdatetime/fromstring/fromstring.pro new file mode 100644 index 0000000000..631fcd71e4 --- /dev/null +++ b/tests/libfuzzer/corelib/time/qdatetime/fromstring/fromstring.pro @@ -0,0 +1,10 @@ +QT -= gui +CONFIG -= app_bundle +CONFIG += console +SOURCES += main.cpp +FUZZ_ENGINE = $$(LIB_FUZZING_ENGINE) +isEmpty(FUZZ_ENGINE) { + QMAKE_LFLAGS += -fsanitize=fuzzer +} else { + LIBS += $$FUZZ_ENGINE +} diff --git a/tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp b/tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp new file mode 100644 index 0000000000..e41301bb55 --- /dev/null +++ b/tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QDateTime> + +static const QString formats[] = { + QStringLiteral("h"), + QStringLiteral("hh"), + QStringLiteral("H"), + QStringLiteral("HH"), + QStringLiteral("m"), + QStringLiteral("mm"), + QStringLiteral("s"), + QStringLiteral("ss"), + QStringLiteral("z"), + QStringLiteral("zzz"), + QStringLiteral("A"), + QStringLiteral("t"), + QStringLiteral("M/d/yyyy"), + QStringLiteral("M/d/yyyy hh:mm"), + QStringLiteral("M/d/yyyy hh:mm A"), + QStringLiteral("M/d/yyyy, hh:mm"), + QStringLiteral("M/d/yyyy, hh:mm A"), + QStringLiteral("MMM d yyyy"), + QStringLiteral("MMM d yyyy hh:mm"), + QStringLiteral("MMM d yyyy hh:mm:ss"), + QStringLiteral("MMM d yyyy, hh:mm"), + QStringLiteral("MMM d yyyy, hh:mm:ss"), + QStringLiteral("MMMM d yyyy"), + QStringLiteral("MMMM d yyyy hh:mm"), + QStringLiteral("MMMM d yyyy hh:mm:ss"), + QStringLiteral("MMMM d yyyy, hh:mm"), + QStringLiteral("MMMM d yyyy, hh:mm:ss"), + QStringLiteral("MMMM d yyyy, hh:mm:ss t"), + QStringLiteral("MMM d, yyyy"), + QStringLiteral("MMM d, yyyy hh:mm"), + QStringLiteral("MMM d, yyyy hh:mm:ss"), + QStringLiteral("MMMM d, yyyy"), + QStringLiteral("MMMM d, yyyy hh:mm"), + QStringLiteral("MMMM d, yyyy hh:mm:ss"), + QStringLiteral("MMMM d, yyyy hh:mm:ss t"), + QStringLiteral("d MMM yyyy"), + QStringLiteral("d MMM yyyy hh:mm"), + QStringLiteral("d MMM yyyy hh:mm:ss"), + QStringLiteral("d MMM yyyy, hh:mm"), + QStringLiteral("d MMM yyyy, hh:mm:ss"), + QStringLiteral("d MMMM yyyy"), + QStringLiteral("d MMMM yyyy hh:mm"), + QStringLiteral("d MMMM yyyy hh:mm:ss"), + QStringLiteral("d MMMM yyyy, hh:mm"), + QStringLiteral("d MMMM yyyy, hh:mm:ss"), + QStringLiteral("d MMM, yyyy"), + QStringLiteral("d MMM, yyyy hh:mm"), + QStringLiteral("d MMM, yyyy hh:mm:ss"), + QStringLiteral("d MMMM, yyyy"), + QStringLiteral("d MMMM, yyyy hh:mm"), + QStringLiteral("d MMMM, yyyy hh:mm:ss"), + QStringLiteral("yyyy-MM-ddThh:mm:ss.zt"), +}; + +// libFuzzer entry-point for testing QDateTimeParser +extern "C" int LLVMFuzzerTestOneInput(const char *Data, size_t Size) +{ + const QString userString = QString::fromUtf8(Data, Size); + + QDateTime::fromString(userString, Qt::TextDate); + QDateTime::fromString(userString, Qt::ISODate); + QDateTime::fromString(userString, Qt::RFC2822Date); + QDateTime::fromString(userString, Qt::ISODateWithMs); + + for (const auto &format : formats) { + QDateTime::fromString(userString, format); + } + return 0; +} |