diff options
author | unknown <knielsen@ymer.(none)> | 2006-10-25 10:37:53 +0200 |
---|---|---|
committer | unknown <knielsen@ymer.(none)> | 2006-10-25 10:37:53 +0200 |
commit | c6ca641a6ba8b7edbc9f08de8dc46356b50028a6 (patch) | |
tree | a2bcb9ddef1ff6be1f40b9ab9d57a09fe198dcf3 /ndb | |
parent | 311abf108bcc9fff9aff1a9e176ac667014019e9 (diff) | |
download | mariadb-git-c6ca641a6ba8b7edbc9f08de8dc46356b50028a6.tar.gz |
Fix two small problems in the source, potentially causing user-visible
bugs.
ndb/include/util/UtilBuffer.hpp:
Fix accessing memory after free(), if called with source and destination
pointer the same (which should not really happen...).
Fixes a problem in ndb_restore.
ndb/src/common/util/SimpleProperties.cpp:
Fix typo in check of maxValue.
Diffstat (limited to 'ndb')
-rw-r--r-- | ndb/include/util/UtilBuffer.hpp | 8 | ||||
-rw-r--r-- | ndb/src/common/util/SimpleProperties.cpp | 4 |
2 files changed, 8 insertions, 4 deletions
diff --git a/ndb/include/util/UtilBuffer.hpp b/ndb/include/util/UtilBuffer.hpp index f43fc960a16..ba1f47b93d8 100644 --- a/ndb/include/util/UtilBuffer.hpp +++ b/ndb/include/util/UtilBuffer.hpp @@ -73,11 +73,15 @@ public: } int assign(const void * d, size_t l) { - if (data) free(data); + /* Free the old data only after copying, in case d==data. */ + void *old_data= data; data = NULL; len = 0; alloc_size = 0; - return append(d, l); + int ret= append(d, l); + if (old_data) + free(old_data); + return ret; } void clear() { diff --git a/ndb/src/common/util/SimpleProperties.cpp b/ndb/src/common/util/SimpleProperties.cpp index 00c440fcb4e..1dbce41aadb 100644 --- a/ndb/src/common/util/SimpleProperties.cpp +++ b/ndb/src/common/util/SimpleProperties.cpp @@ -245,7 +245,7 @@ SimpleProperties::pack(Writer & it, const void * __src, const char * src_len = _src + _map[i].Length_Offset; Uint32 len = *((Uint32*)src_len); if(!ignoreMinMax){ - if(len == _map[i].maxValue) + if(len > _map[i].maxValue) return ValueTooHigh; } ok = it.add(_map[i].Key, src, len); @@ -254,7 +254,7 @@ SimpleProperties::pack(Writer & it, const void * __src, case SimpleProperties::StringValue: if(!ignoreMinMax){ size_t len = strlen(src); - if(len == _map[i].maxValue) + if(len > _map[i].maxValue) return ValueTooHigh; } ok = it.add(_map[i].Key, src); |