Fix bug 65824

This commit is contained in:
Oleg Korshul
2024-11-02 15:21:53 +03:00
parent 1286dbaaaf
commit 5a6a2f800f
3 changed files with 49 additions and 1 deletions

View File

@ -2,6 +2,7 @@
#include "./../docbuilder_p.h" #include "./../docbuilder_p.h"
#include "../../common/Directory.h" #include "../../common/Directory.h"
#include "../server.h"
JSSmart<CJSValue> CBuilderDocumentEmbed::IsValid() JSSmart<CJSValue> CBuilderDocumentEmbed::IsValid()
{ {
@ -68,13 +69,23 @@ void CBuilderDocumentEmbed::_OpenFile(const std::wstring& sFile, const std::wstr
int nConvertResult = pBuilder->ConvertToInternalFormat(m_sFolder, sFileCopy, sParams); int nConvertResult = pBuilder->ConvertToInternalFormat(m_sFolder, sFileCopy, sParams);
if (0 == nConvertResult) if (0 == nConvertResult)
{
if (CServerInstance::getInstance().IsEnable())
CServerInstance::getInstance().AddTmpFile(m_sFolder);
m_bIsValid = true; m_bIsValid = true;
}
} }
void CBuilderDocumentEmbed::_CloseFile() void CBuilderDocumentEmbed::_CloseFile()
{ {
if (!m_sFolder.empty()) if (!m_sFolder.empty())
{
NSDirectory::DeleteDirectory(m_sFolder); NSDirectory::DeleteDirectory(m_sFolder);
if (m_bIsValid && CServerInstance::getInstance().IsEnable())
CServerInstance::getInstance().RemoveTmpFile(m_sFolder);
}
m_bIsValid = false; m_bIsValid = false;
m_sFolder = L""; m_sFolder = L"";
} }

View File

@ -44,7 +44,10 @@ CImagesWorker::CImagesWorker(const std::wstring& sFolder)
std::wstring CImagesWorker::GetImageLocal(const std::wstring& sUrl) std::wstring CImagesWorker::GetImageLocal(const std::wstring& sUrl)
{ {
if (CServerInstance::getInstance().IsEnable()) if (CServerInstance::getInstance().IsEnable())
return L"error"; {
if (!CServerInstance::getInstance().CheckTmpDirectory(sUrl))
return L"error";
}
std::wstring sExt = NSFile::GetFileExtention(sUrl); std::wstring sExt = NSFile::GetFileExtention(sUrl);
std::wstring sRet = L"image" + std::to_wstring(m_nIndex++) + L"." + sExt; std::wstring sRet = L"image" + std::to_wstring(m_nIndex++) + L"." + sExt;
m_mapImages.insert(std::make_pair(sUrl, sRet)); m_mapImages.insert(std::make_pair(sUrl, sRet));

View File

@ -32,11 +32,19 @@
#ifndef SERVER_SETTINGS_H #ifndef SERVER_SETTINGS_H
#define SERVER_SETTINGS_H #define SERVER_SETTINGS_H
#include <string>
#include <map>
#include "../common/File.h"
#include "../common/StringBuilder.h"
#include <iostream>
// class for server version (disable local files and etc) // class for server version (disable local files and etc)
class CServerInstance class CServerInstance
{ {
private: private:
bool m_bIsEnabled; bool m_bIsEnabled;
std::map<std::wstring, bool> m_arMapTmpFiles;
CServerInstance() CServerInstance()
{ {
m_bIsEnabled = false; m_bIsEnabled = false;
@ -58,6 +66,32 @@ public:
{ {
return m_bIsEnabled; return m_bIsEnabled;
} }
void AddTmpFile(const std::wstring& sFolder)
{
std::wstring sDirectory = sFolder + L"/media";
NSStringUtils::string_replace(sDirectory, L"\\", L"/");
std::map<std::wstring, bool>::iterator findDir = m_arMapTmpFiles.find(sDirectory);
if (findDir == m_arMapTmpFiles.end())
m_arMapTmpFiles.insert(std::make_pair(sDirectory, true));
}
void RemoveTmpFile(const std::wstring& sFolder)
{
std::wstring sDirectory = sFolder + L"/media";
NSStringUtils::string_replace(sDirectory, L"\\", L"/");
std::map<std::wstring, bool>::iterator findDir = m_arMapTmpFiles.find(sDirectory);
if (findDir != m_arMapTmpFiles.end())
m_arMapTmpFiles.erase(findDir);
}
bool CheckTmpDirectory(const std::wstring& sFile)
{
std::wstring sDirectory = NSFile::GetDirectoryName(sFile);
NSStringUtils::string_replace(sDirectory, L"\\", L"/");
std::map<std::wstring, bool>::iterator findDir = m_arMapTmpFiles.find(sDirectory);
return (findDir != m_arMapTmpFiles.end()) ? true : false;
}
}; };