mirror of https://github.com/axmolengine/axmol.git
If path to file is tool long crash is possible. (#19593)
* If path to file is tool long crash is possible. If path to file is tool long crash is possible, because of chart buffer overflow. * Incorrect replacement. Using iterator is better. * Style fix * Correct naming
This commit is contained in:
parent
0a9e66a16c
commit
1f7c0c9408
|
@ -36,7 +36,7 @@
|
|||
NS_CC_BEGIN
|
||||
|
||||
std::unordered_map<std::string, FontAtlas *> FontAtlasCache::_atlasMap;
|
||||
#define ATLAS_MAP_KEY_BUFFER 255
|
||||
#define ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE 255
|
||||
|
||||
void FontAtlasCache::purgeCachedData()
|
||||
{
|
||||
|
@ -60,15 +60,11 @@ FontAtlas* FontAtlasCache::getFontAtlasTTF(const _ttfConfig* config)
|
|||
useDistanceField = false;
|
||||
}
|
||||
|
||||
char tmp[ATLAS_MAP_KEY_BUFFER];
|
||||
if (useDistanceField) {
|
||||
snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "df %.2f %d %s", config->fontSize, config->outlineSize,
|
||||
realFontFilename.c_str());
|
||||
} else {
|
||||
snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "%.2f %d %s", config->fontSize, config->outlineSize,
|
||||
realFontFilename.c_str());
|
||||
}
|
||||
std::string atlasName = tmp;
|
||||
std::string key;
|
||||
char keyPrefix[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE];
|
||||
snprintf(keyPrefix, ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE, useDistanceField ? "df %.2f %d " : "%.2f %d ", config->fontSize, config->outlineSize);
|
||||
std::string atlasName(keyPrefix);
|
||||
atlasName += realFontFilename;
|
||||
|
||||
auto it = _atlasMap.find(atlasName);
|
||||
|
||||
|
@ -95,9 +91,10 @@ FontAtlas* FontAtlasCache::getFontAtlasTTF(const _ttfConfig* config)
|
|||
FontAtlas* FontAtlasCache::getFontAtlasFNT(const std::string& fontFileName, const Vec2& imageOffset /* = Vec2::ZERO */)
|
||||
{
|
||||
auto realFontFilename = FileUtils::getInstance()->getNewFilename(fontFileName); // resolves real file path, to prevent storing multiple atlases for the same file.
|
||||
char tmp[ATLAS_MAP_KEY_BUFFER];
|
||||
snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "%.2f %.2f %s", imageOffset.x, imageOffset.y, realFontFilename.c_str());
|
||||
std::string atlasName = tmp;
|
||||
char keyPrefix[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE];
|
||||
snprintf(keyPrefix, ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE, "%.2f %.2f ", imageOffset.x, imageOffset.y);
|
||||
std::string atlasName(keyPrefix);
|
||||
atlasName += realFontFilename;
|
||||
|
||||
auto it = _atlasMap.find(atlasName);
|
||||
if ( it == _atlasMap.end() )
|
||||
|
@ -147,9 +144,9 @@ FontAtlas* FontAtlasCache::getFontAtlasCharMap(const std::string& plistFile)
|
|||
|
||||
FontAtlas* FontAtlasCache::getFontAtlasCharMap(Texture2D* texture, int itemWidth, int itemHeight, int startCharMap)
|
||||
{
|
||||
char tmp[30];
|
||||
sprintf(tmp,"name:%u_%d_%d_%d",texture->getName(),itemWidth,itemHeight,startCharMap);
|
||||
std::string atlasName = tmp;
|
||||
char key[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE];
|
||||
sprintf(key,"name:%u_%d_%d_%d",texture->getName(),itemWidth,itemHeight,startCharMap);
|
||||
std::string atlasName = key;
|
||||
|
||||
auto it = _atlasMap.find(atlasName);
|
||||
if ( it == _atlasMap.end() )
|
||||
|
@ -174,9 +171,10 @@ FontAtlas* FontAtlasCache::getFontAtlasCharMap(Texture2D* texture, int itemWidth
|
|||
|
||||
FontAtlas* FontAtlasCache::getFontAtlasCharMap(const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap)
|
||||
{
|
||||
char tmp[ATLAS_MAP_KEY_BUFFER];
|
||||
snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "%d %d %d %s", itemWidth, itemHeight, startCharMap, charMapFile.c_str());
|
||||
std::string atlasName = tmp;
|
||||
char keyPrefix[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE];
|
||||
snprintf(keyPrefix, ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE, "%d %d %d ", itemWidth, itemHeight, startCharMap);
|
||||
std::string atlasName(keyPrefix);
|
||||
atlasName += charMapFile;
|
||||
|
||||
auto it = _atlasMap.find(atlasName);
|
||||
if ( it == _atlasMap.end() )
|
||||
|
@ -224,9 +222,10 @@ bool FontAtlasCache::releaseFontAtlas(FontAtlas *atlas)
|
|||
|
||||
void FontAtlasCache::reloadFontAtlasFNT(const std::string& fontFileName, const Vec2& imageOffset/* = Vec2::ZERO*/)
|
||||
{
|
||||
char tmp[ATLAS_MAP_KEY_BUFFER];
|
||||
snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "%.2f %.2f %s", imageOffset.x, imageOffset.y, fontFileName.c_str());
|
||||
std::string atlasName = tmp;
|
||||
char keyPrefix[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE];
|
||||
snprintf(keyPrefix, ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE, "%.2f %.2f ", imageOffset.x, imageOffset.y);
|
||||
std::string atlasName(keyPrefix);
|
||||
atlasName += fontFileName;
|
||||
|
||||
auto it = _atlasMap.find(atlasName);
|
||||
if (it != _atlasMap.end())
|
||||
|
|
Loading…
Reference in New Issue