diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-06-16 14:45:36 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-06-16 14:45:36 -0700 |
commit | 490d20e8fb1c936324e3501196004592f46b3ff4 (patch) | |
tree | c3dcc1b4fed3f283ad9dfe0eb4dbcee32955842e /node | |
parent | 2113c21fdcc57bc8c07a4e514937cd07f7bc8526 (diff) | |
download | infinitytier-490d20e8fb1c936324e3501196004592f46b3ff4.tar.gz infinitytier-490d20e8fb1c936324e3501196004592f46b3ff4.zip |
Self test for dictionary, and fixes.
Diffstat (limited to 'node')
-rw-r--r-- | node/Dictionary.hpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/node/Dictionary.hpp b/node/Dictionary.hpp index e4c7ff20..dca8ac67 100644 --- a/node/Dictionary.hpp +++ b/node/Dictionary.hpp @@ -27,7 +27,7 @@ #include <stdint.h> // Can be increased if it's ever needed, but not too much. -#define ZT_DICTIONARY_MAX_SIZE 16384 +#define ZT_DICTIONARY_MAX_SIZE 8194 namespace ZeroTier { @@ -279,6 +279,15 @@ public: for(unsigned int i=0;i<ZT_DICTIONARY_MAX_SIZE;++i) { if (!_d[i]) { unsigned int j = i; + + if (j > 0) { + _d[j++] = '\n'; + if (j == ZT_DICTIONARY_MAX_SIZE) { + _d[i] = (char)0; + return false; + } + } + const char *p = key; while (*p) { _d[j++] = *(p++); @@ -287,9 +296,16 @@ public: return false; } } + + _d[j++] = '='; + if (j == ZT_DICTIONARY_MAX_SIZE) { + _d[i] = (char)0; + return false; + } + p = value; int k = 0; - while ((*p)&&((vlen < 0)||(k < vlen))) { + while ( ((*p)&&(vlen < 0)) || (k < vlen) ) { switch(*p) { case 0: case '\r': @@ -326,7 +342,9 @@ public: ++p; ++k; } - _d[j++] = (char)0; + + _d[j] = (char)0; + return true; } } |