fix: make sure creating directories in OutputPathFilesystem cannot lead to a crash

This commit is contained in:
Jan 2025-01-11 13:05:45 +01:00
parent 27c01e0a41
commit b584cd7423
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C

View File

@ -1,6 +1,8 @@
#include "OutputPathFilesystem.h" #include "OutputPathFilesystem.h"
#include <format>
#include <fstream> #include <fstream>
#include <iostream>
namespace fs = std::filesystem; namespace fs = std::filesystem;
@ -17,11 +19,21 @@ std::unique_ptr<std::ostream> OutputPathFilesystem::Open(const std::string& file
return nullptr; return nullptr;
const auto containingDirectory = fullNewPath.parent_path(); const auto containingDirectory = fullNewPath.parent_path();
fs::create_directories(containingDirectory);
std::error_code ec;
fs::create_directories(containingDirectory, ec);
if (ec)
{
std::cerr << std::format("Failed to create folder '{}' when try to open file '{}'\n", containingDirectory, fileName);
return nullptr;
}
std::ofstream stream(fullNewPath, std::ios::binary | std::ios::out); std::ofstream stream(fullNewPath, std::ios::binary | std::ios::out);
if (!stream.is_open()) if (!stream.is_open())
{
std::cerr << std::format("Failed to open file '{}'\n", fileName);
return nullptr; return nullptr;
}
return std::make_unique<std::ofstream>(std::move(stream)); return std::make_unique<std::ofstream>(std::move(stream));
} }