summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-06-16 14:45:36 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-06-16 14:45:36 -0700
commit490d20e8fb1c936324e3501196004592f46b3ff4 (patch)
treec3dcc1b4fed3f283ad9dfe0eb4dbcee32955842e /node
parent2113c21fdcc57bc8c07a4e514937cd07f7bc8526 (diff)
downloadinfinitytier-490d20e8fb1c936324e3501196004592f46b3ff4.tar.gz
infinitytier-490d20e8fb1c936324e3501196004592f46b3ff4.zip
Self test for dictionary, and fixes.
Diffstat (limited to 'node')
-rw-r--r--node/Dictionary.hpp24
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;
}
}