1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-16 00:03:45 +00:00

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
This commit is contained in:
Bryan Roe
2019-01-17 18:05:26 -08:00
parent 0b36dd07fe
commit ba28e98ef7
2 changed files with 10 additions and 0 deletions

View File

@@ -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))

View File

@@ -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)
{