From ba28e98ef75fda440a09c0a4d2837dca63bfb72a Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Thu, 17 Jan 2019 18:05:26 -0800 Subject: [PATCH] 1. Fixed bug where the last result data length could include the NULL terminator if the input string length was too long. 2. Updated DB calls, to Get/Put will truncate the NULL terminator if it is specified in the key name 3. Updated COMPACT, so keynames will be fixed if it contains a NULL terminator --- microstack/ILibParsers.c | 1 + microstack/ILibSimpleDataStore.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/microstack/ILibParsers.c b/microstack/ILibParsers.c index d3ba037..798ab7c 100644 --- a/microstack/ILibParsers.c +++ b/microstack/ILibParsers.c @@ -4643,6 +4643,7 @@ struct parser_result* ILibParseString(char* buffer, int offset, int length, cons // Iterate through the string to find delimiters // Token = buffer + offset; + if (Token[length - 1] == 0) { length -= 1; } for(i = offset; i < length; ++i) { if (ILibIsDelimiter(buffer, i, length, Delimiter, DelimiterLength)) diff --git a/microstack/ILibSimpleDataStore.c b/microstack/ILibSimpleDataStore.c index 75ec512..9a1b642 100644 --- a/microstack/ILibSimpleDataStore.c +++ b/microstack/ILibSimpleDataStore.c @@ -295,6 +295,7 @@ __EXPORT_TYPE int ILibSimpleDataStore_PutEx(ILibSimpleDataStore dataStore, char* ILibSimpleDataStore_TableEntry *entry; if (root == NULL) return 0; + if (keyLen > 1 && key[keyLen - 1] == 0) { keyLen -= 1; } entry = (ILibSimpleDataStore_TableEntry*)ILibHashtable_Get(root->keyTable, NULL, key, keyLen); ILibSimpleDataStore_SHA384(value, valueLen, hash); // Hash the value @@ -322,6 +323,7 @@ __EXPORT_TYPE int ILibSimpleDataStore_GetEx(ILibSimpleDataStore dataStore, char* ILibSimpleDataStore_TableEntry *entry; if (root == NULL) return 0; + if (keyLen > 1 && key[keyLen - 1] == 0) { keyLen -= 1; } entry = (ILibSimpleDataStore_TableEntry*)ILibHashtable_Get(root->keyTable, NULL, key, keyLen); if (entry == NULL) return 0; // If there is no in-memory entry for this key, return zero now. @@ -393,6 +395,13 @@ void ILibSimpleDataStore_Compact_EnumerateSink(ILibHashtable sender, void *Key1, if (root == NULL) return; if (root->error != 0) return; // There was an error, ABORT! + if (Key2Len > 1) + { + if (Key2[Key2Len - 1] == 0) + { + Key2Len -= 1; + } + } offset = ILibSimpleDataStore_WriteRecord(compacted, Key2, Key2Len, NULL, entry->valueLength, entry->valueHash); while (bytesLeft > 0) {