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 "../../common/Directory.h"
#include "../server.h"
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);
if (0 == nConvertResult)
{
if (CServerInstance::getInstance().IsEnable())
CServerInstance::getInstance().AddTmpFile(m_sFolder);
m_bIsValid = true;
}
}
void CBuilderDocumentEmbed::_CloseFile()
{
if (!m_sFolder.empty())
{
NSDirectory::DeleteDirectory(m_sFolder);
if (m_bIsValid && CServerInstance::getInstance().IsEnable())
CServerInstance::getInstance().RemoveTmpFile(m_sFolder);
}
m_bIsValid = false;
m_sFolder = L"";
}

View File

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

View File

@ -32,11 +32,19 @@
#ifndef 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 CServerInstance
{
private:
bool m_bIsEnabled;
std::map<std::wstring, bool> m_arMapTmpFiles;
CServerInstance()
{
m_bIsEnabled = false;
@ -58,6 +66,32 @@ public:
{
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;
}
};