summaryrefslogtreecommitdiffstats
path: root/tests/libfuzzer/corelib/time/qdatetime
diff options
context:
space:
mode:
Diffstat (limited to 'tests/libfuzzer/corelib/time/qdatetime')
-rw-r--r--tests/libfuzzer/corelib/time/qdatetime/fromstring/CMakeLists.txt30
-rw-r--r--tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp88
2 files changed, 118 insertions, 0 deletions
diff --git a/tests/libfuzzer/corelib/time/qdatetime/fromstring/CMakeLists.txt b/tests/libfuzzer/corelib/time/qdatetime/fromstring/CMakeLists.txt
new file mode 100644
index 0000000000..b4ffa66760
--- /dev/null
+++ b/tests/libfuzzer/corelib/time/qdatetime/fromstring/CMakeLists.txt
@@ -0,0 +1,30 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(fromstring LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core)
+
+qt_add_executable(fromstring
+ main.cpp
+)
+
+target_link_libraries(fromstring PUBLIC
+ Qt::Core
+)
+if(DEFINED ENV{LIB_FUZZING_ENGINE})
+ target_link_libraries(fromstring PRIVATE
+ $ENV{LIB_FUZZING_ENGINE}
+ )
+else()
+ target_link_libraries(fromstring PRIVATE
+ -fsanitize=fuzzer
+ )
+endif()
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..a0bbe9b03d
--- /dev/null
+++ b/tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp
@@ -0,0 +1,88 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QDateTime>
+
+// Enable to report the currently used format, e.g. when reproducing issues
+// #define LOG_FORMAT
+#ifdef LOG_FORMAT
+#include <QDebug>
+#endif
+
+static const QString formats[] = {
+ QStringLiteral("M/d/yyyy"),
+ 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 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);
+
+ QDateTime::fromString(userString, formats[0], QCalendar(QCalendar::System::Gregorian));
+ for (int sys = int(QCalendar::System::Julian); sys <= int(QCalendar::System::Last); ++sys)
+ QDateTime::fromString(userString, formats[0], QCalendar(QCalendar::System(sys)));
+
+ for (const auto &format : formats) {
+ #ifdef LOG_FORMAT
+ qDebug() << "Trying format:" << format;
+ #endif
+ QDateTime::fromString(userString, format);
+ }
+ return 0;
+}