From 4e998fd507e9db6672c69b52b2c6f0ac45a02e01 Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 20 May 2020 23:17:30 +0200 Subject: [PATCH] Fixed bad permission access that caused an application loop --- src/libs/av/impl/AvTranscoder.cpp | 20 +++++++++++++++++--- src/libs/utils/impl/FileResourceHandler.cpp | 8 ++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/libs/av/impl/AvTranscoder.cpp b/src/libs/av/impl/AvTranscoder.cpp index 50e7991d..47454837 100644 --- a/src/libs/av/impl/AvTranscoder.cpp +++ b/src/libs/av/impl/AvTranscoder.cpp @@ -54,10 +54,24 @@ Transcoder::Transcoder(const std::filesystem::path& filePath, const TranscodePar bool Transcoder::start() { - if (!std::filesystem::exists(_filePath)) - return false; - else if (!std::filesystem::is_regular_file( _filePath) ) + try + { + if (!std::filesystem::exists(_filePath)) + { + LOG(ERROR) << "File '" << _filePath << "' does not exist!"; + return false; + } + else if (!std::filesystem::is_regular_file( _filePath) ) + { + LOG(ERROR) << "File '" << _filePath << "' is not regular!"; + return false; + } + } + catch (const std::filesystem::filesystem_error& e) + { + LOG(ERROR) << "File error on '" << _filePath.string() << "': " << e.what(); return false; + } LOG(INFO) << "Transcoding file '" << _filePath.string() << "'"; diff --git a/src/libs/utils/impl/FileResourceHandler.cpp b/src/libs/utils/impl/FileResourceHandler.cpp index ad7ec8eb..f031adfc 100644 --- a/src/libs/utils/impl/FileResourceHandler.cpp +++ b/src/libs/utils/impl/FileResourceHandler.cpp @@ -42,8 +42,6 @@ FileResourceHandler::processRequest(const Wt::Http::Request& request, Wt::Http:: ::uint64_t startByte {_offset}; std::ifstream ifs {_path.string().c_str(), std::ios::in | std::ios::binary}; - LMS_LOG(UTILS, DEBUG) << "startByte = " << startByte; - if (startByte == 0) { if (!ifs) @@ -100,6 +98,12 @@ FileResourceHandler::processRequest(const Wt::Http::Request& request, Wt::Http:: response.setContentLength(_beyondLastByte); } } + else if (!ifs) + { + LMS_LOG(UTILS, ERROR) << "Cannot reopen file stream for '" << _path.string() << "'"; + _isFinished = true; + return; + } ifs.seekg(static_cast(startByte));