mirror of
https://github.com/monero-project/monero.git
synced 2024-11-17 00:07:38 +00:00
epee: also limit number of strings in portable_storage
They require at least 24 bytes
This commit is contained in:
parent
dbaf95ac77
commit
b9092ddb5c
1 changed files with 11 additions and 1 deletions
|
@ -38,7 +38,8 @@
|
||||||
#define EPEE_PORTABLE_STORAGE_RECURSION_LIMIT_INTERNAL 100
|
#define EPEE_PORTABLE_STORAGE_RECURSION_LIMIT_INTERNAL 100
|
||||||
#endif
|
#endif
|
||||||
#define EPEE_PORTABLE_STORAGE_OBJECT_LIMIT_INTERNAL 65536
|
#define EPEE_PORTABLE_STORAGE_OBJECT_LIMIT_INTERNAL 65536
|
||||||
#define EPEE_PORTABLE_STORAGE_OBJECT_FIELD_LIMIT_INTERNAL 262144
|
#define EPEE_PORTABLE_STORAGE_OBJECT_FIELD_LIMIT_INTERNAL 65536
|
||||||
|
#define EPEE_PORTABLE_STORAGE_STRING_LIMIT_INTERNAL 65536 // does not include field names
|
||||||
|
|
||||||
namespace epee
|
namespace epee
|
||||||
{
|
{
|
||||||
|
@ -106,6 +107,7 @@ namespace epee
|
||||||
size_t m_recursion_count;
|
size_t m_recursion_count;
|
||||||
size_t m_objects;
|
size_t m_objects;
|
||||||
size_t m_fields;
|
size_t m_fields;
|
||||||
|
size_t m_strings;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline throwable_buffer_reader::throwable_buffer_reader(const void* ptr, size_t sz)
|
inline throwable_buffer_reader::throwable_buffer_reader(const void* ptr, size_t sz)
|
||||||
|
@ -119,6 +121,7 @@ namespace epee
|
||||||
m_recursion_count = 0;
|
m_recursion_count = 0;
|
||||||
m_objects = 0;
|
m_objects = 0;
|
||||||
m_fields = 0;
|
m_fields = 0;
|
||||||
|
m_strings = 0;
|
||||||
}
|
}
|
||||||
inline
|
inline
|
||||||
void throwable_buffer_reader::read(void* target, size_t count)
|
void throwable_buffer_reader::read(void* target, size_t count)
|
||||||
|
@ -172,6 +175,11 @@ namespace epee
|
||||||
CHECK_AND_ASSERT_THROW_MES(size <= EPEE_PORTABLE_STORAGE_OBJECT_LIMIT_INTERNAL - m_objects, "Too many objects");
|
CHECK_AND_ASSERT_THROW_MES(size <= EPEE_PORTABLE_STORAGE_OBJECT_LIMIT_INTERNAL - m_objects, "Too many objects");
|
||||||
m_objects += size;
|
m_objects += size;
|
||||||
}
|
}
|
||||||
|
else if (std::is_same<type_name, std::string>())
|
||||||
|
{
|
||||||
|
CHECK_AND_ASSERT_THROW_MES(size <= EPEE_PORTABLE_STORAGE_STRING_LIMIT_INTERNAL - m_strings, "Too many strings");
|
||||||
|
m_strings += size;
|
||||||
|
}
|
||||||
|
|
||||||
sa.reserve(size);
|
sa.reserve(size);
|
||||||
//TODO: add some optimization here later
|
//TODO: add some optimization here later
|
||||||
|
@ -238,6 +246,8 @@ namespace epee
|
||||||
inline storage_entry throwable_buffer_reader::read_se<std::string>()
|
inline storage_entry throwable_buffer_reader::read_se<std::string>()
|
||||||
{
|
{
|
||||||
RECURSION_LIMITATION();
|
RECURSION_LIMITATION();
|
||||||
|
CHECK_AND_ASSERT_THROW_MES(m_strings + 1 <= EPEE_PORTABLE_STORAGE_STRING_LIMIT_INTERNAL, "Too many strings");
|
||||||
|
m_strings += 1;
|
||||||
return storage_entry(read<std::string>());
|
return storage_entry(read<std::string>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue