From afbd8024110aaa80a7b94cff9a9d96e763b13916 Mon Sep 17 00:00:00 2001 From: hop311 Date: Mon, 22 Jan 2024 16:32:18 +0000 Subject: Fixed BasicParser::_file_path relying on externally controlled memory --- src/openvic-dataloader/detail/BasicParser.cpp | 4 ++++ src/openvic-dataloader/detail/Errors.hpp | 6 ++++-- src/openvic-dataloader/detail/LexyReportError.hpp | 5 +++++ src/openvic-dataloader/detail/Warnings.hpp | 8 +++++--- 4 files changed, 18 insertions(+), 5 deletions(-) (limited to 'src/openvic-dataloader/detail') diff --git a/src/openvic-dataloader/detail/BasicParser.cpp b/src/openvic-dataloader/detail/BasicParser.cpp index ee1b516..212bf00 100644 --- a/src/openvic-dataloader/detail/BasicParser.cpp +++ b/src/openvic-dataloader/detail/BasicParser.cpp @@ -44,4 +44,8 @@ const std::vector& BasicParser::get_errors() const { const std::vector& BasicParser::get_warnings() const { return _warnings; +} + +std::string_view BasicParser::get_file_path() const { + return _file_path; } \ No newline at end of file diff --git a/src/openvic-dataloader/detail/Errors.hpp b/src/openvic-dataloader/detail/Errors.hpp index bf7c831..fbebcc5 100644 --- a/src/openvic-dataloader/detail/Errors.hpp +++ b/src/openvic-dataloader/detail/Errors.hpp @@ -1,11 +1,13 @@ #pragma once +#include + #include namespace ovdl::errors { - inline const ParseError make_no_file_error(const char* file_path) { + inline const ParseError make_no_file_error(std::string_view file_path) { std::string message; - if (!file_path) { + if (file_path.empty()) { message = "File path not specified."; } else { message = "File '" + std::string(file_path) + "' was not found."; diff --git a/src/openvic-dataloader/detail/LexyReportError.hpp b/src/openvic-dataloader/detail/LexyReportError.hpp index 9629963..213090b 100644 --- a/src/openvic-dataloader/detail/LexyReportError.hpp +++ b/src/openvic-dataloader/detail/LexyReportError.hpp @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -85,6 +86,10 @@ namespace ovdl::detail { return { _iter, _opts, path }; } + constexpr _ReportError path(const detail::Has_c_str auto& path_object) const { + return path(path_object.c_str()); + } + /// Specifies an output iterator where the errors are written to. template constexpr _ReportError to(OI out) const { diff --git a/src/openvic-dataloader/detail/Warnings.hpp b/src/openvic-dataloader/detail/Warnings.hpp index 6c0b34e..8fc09bd 100644 --- a/src/openvic-dataloader/detail/Warnings.hpp +++ b/src/openvic-dataloader/detail/Warnings.hpp @@ -1,13 +1,15 @@ #pragma once -#include +#include + +#include namespace ovdl::v2script::warnings { - inline const ParseWarning make_utf8_warning(const char* file_path) { + inline const ParseWarning make_utf8_warning(std::string_view file_path) { constexpr std::string_view message_suffix = "This may cause problems. Prefer Windows-1252 encoding."; std::string message; - if (!file_path) { + if (file_path.empty()) { message = "Buffer is a UTF-8 encoded string. " + std::string(message_suffix); } else { message = "File '" + std::string(file_path) + "' is a UTF-8 encoded file. " + std::string(message_suffix); -- cgit v1.2.3-56-ga3b1