From cea9c8451741d54d7faaf38f1712f294f0603942 Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Thu, 29 Sep 2011 17:32:35 +0000 Subject: [PATCH] Add logging when size limits exceeded. --- xmltooling/impl/MemoryStorageService.cpp | 48 +++++++++++++++++++++----------- xmltooling/util/StorageService.h | 16 +++++------ 2 files changed, 39 insertions(+), 25 deletions(-) diff --git a/xmltooling/impl/MemoryStorageService.cpp b/xmltooling/impl/MemoryStorageService.cpp index 60d2c63..546db20 100644 --- a/xmltooling/impl/MemoryStorageService.cpp +++ b/xmltooling/impl/MemoryStorageService.cpp @@ -47,24 +47,30 @@ namespace xmltooling { MemoryStorageService(const DOMElement* e); virtual ~MemoryStorageService(); - bool createString(const char* context, const char* key, const char* value, time_t expiration); - int readString(const char* context, const char* key, string* pvalue=nullptr, time_t* pexpiration=nullptr, int version=0); - int updateString(const char* context, const char* key, const char* value=nullptr, time_t expiration=0, int version=0); - bool deleteString(const char* context, const char* key); - - bool createText(const char* context, const char* key, const char* value, time_t expiration) { - return createString(context, key, value, expiration); + bool createString(const char* context, const char* key, const char* value, time_t expiration) { + if (m_log.isDebugEnabled() && value && strlen(value) > 255) { + m_log.debug("string value for key (%s) exceeded allowed length", key); + } + return createText(context, key, value, expiration); } - int readText(const char* context, const char* key, string* pvalue=nullptr, time_t* pexpiration=nullptr, int version=0) { - return readString(context, key, pvalue, pexpiration, version); + int readString(const char* context, const char* key, string* pvalue=nullptr, time_t* pexpiration=nullptr, int version=0) { + return readText(context, key, pvalue, pexpiration, version); } - int updateText(const char* context, const char* key, const char* value=nullptr, time_t expiration=0, int version=0) { - return updateString(context, key, value, expiration, version); + int updateString(const char* context, const char* key, const char* value=nullptr, time_t expiration=0, int version=0) { + if (m_log.isDebugEnabled() && value && strlen(value) > 255) { + m_log.debug("string value for key (%s) exceeded allowed length", key); + } + return updateText(context, key, value, expiration, version); } - bool deleteText(const char* context, const char* key) { - return deleteString(context, key); + bool deleteString(const char* context, const char* key) { + return deleteText(context, key); } + bool createText(const char* context, const char* key, const char* value, time_t expiration); + int readText(const char* context, const char* key, string* pvalue=nullptr, time_t* pexpiration=nullptr, int version=0); + int updateText(const char* context, const char* key, const char* value=nullptr, time_t expiration=0, int version=0); + bool deleteText(const char* context, const char* key); + void reap(const char* context); void updateContext(const char* context, time_t expiration); void deleteContext(const char* context) { @@ -212,8 +218,16 @@ unsigned long MemoryStorageService::Context::reap(time_t exp) return count; } -bool MemoryStorageService::createString(const char* context, const char* key, const char* value, time_t expiration) +bool MemoryStorageService::createText(const char* context, const char* key, const char* value, time_t expiration) { + // This doesn't matter for this implementation, but helps identify bugs that might break others. + if (m_log.isDebugEnabled()) { + if (strlen(context) > 255) + m_log.debug("context value (%s) exceeded allowed length", context); + if (strlen(key) > 255) + m_log.debug("key value (%s) in context (%s) exceeded allowed length", key, context); + } + Context& ctx = writeContext(context); SharedLock locker(m_lock, false); @@ -233,7 +247,7 @@ bool MemoryStorageService::createString(const char* context, const char* key, co return true; } -int MemoryStorageService::readString(const char* context, const char* key, string* pvalue, time_t* pexpiration, int version) +int MemoryStorageService::readText(const char* context, const char* key, string* pvalue, time_t* pexpiration, int version) { Context& ctx = readContext(context); SharedLock locker(m_lock, false); @@ -252,7 +266,7 @@ int MemoryStorageService::readString(const char* context, const char* key, strin return i->second.version; } -int MemoryStorageService::updateString(const char* context, const char* key, const char* value, time_t expiration, int version) +int MemoryStorageService::updateText(const char* context, const char* key, const char* value, time_t expiration, int version) { Context& ctx = writeContext(context); SharedLock locker(m_lock, false); @@ -278,7 +292,7 @@ int MemoryStorageService::updateString(const char* context, const char* key, con return i->second.version; } -bool MemoryStorageService::deleteString(const char* context, const char* key) +bool MemoryStorageService::deleteText(const char* context, const char* key) { Context& ctx = writeContext(context); SharedLock locker(m_lock, false); diff --git a/xmltooling/util/StorageService.h b/xmltooling/util/StorageService.h index ffbbe35..8bbe681 100644 --- a/xmltooling/util/StorageService.h +++ b/xmltooling/util/StorageService.h @@ -52,7 +52,7 @@ namespace xmltooling { /** * Creates a new "short" record in the storage service. * - * @param context a storage context label + * @param context a storage context label of up to 255 bytes * @param key null-terminated unique key of up to 255 bytes * @param value null-terminated value of up to 255 bytes to store * @param expiration an expiration timestamp, after which the record can be purged @@ -67,7 +67,7 @@ namespace xmltooling { * *

The version parameter can be set for "If-Modified-Since" semantics. * - * @param context a storage context label + * @param context a storage context label of up to 255 bytes * @param key null-terminated unique key of up to 255 bytes * @param pvalue location in which to return the record value * @param pexpiration location in which to return the expiration timestamp @@ -83,7 +83,7 @@ namespace xmltooling { /** * Updates an existing "short" record in the storage service. * - * @param context a storage context label + * @param context a storage context label of up to 255 bytes * @param key null-terminated unique key of up to 255 bytes * @param value null-terminated value of up to 255 bytes to store, or nullptr to leave alone * @param expiration a new expiration timestamp, or 0 to leave alone @@ -100,7 +100,7 @@ namespace xmltooling { /** * Deletes an existing "short" record from the storage service. * - * @param context a storage context label + * @param context a storage context label of up to 255 bytes * @param key null-terminated unique key of up to 255 bytes * @return true iff the record existed and was deleted * @@ -111,7 +111,7 @@ namespace xmltooling { /** * Creates a new "long" record in the storage service. * - * @param context a storage context label + * @param context a storage context label of up to 255 bytes * @param key null-terminated unique key of up to 255 bytes * @param value null-terminated value of arbitrary length * @param expiration an expiration timestamp, after which the record can be purged @@ -126,7 +126,7 @@ namespace xmltooling { * *

The version parameter can be set for "If-Modified-Since" semantics. * - * @param context a storage context label + * @param context a storage context label of up to 255 bytes * @param key null-terminated unique key of up to 255 bytes * @param pvalue location in which to return the record value * @param pexpiration location in which to return the expiration timestamp @@ -142,7 +142,7 @@ namespace xmltooling { /** * Updates an existing "long" record in the storage service. * - * @param context a storage context label + * @param context a storage context label of up to 255 bytes * @param key null-terminated unique key of up to 255 bytes * @param value null-terminated value of arbitrary length to store, or nullptr to leave alone * @param expiration a new expiration timestamp, or 0 to leave alone @@ -159,7 +159,7 @@ namespace xmltooling { /** * Deletes an existing "long" record from the storage service. * - * @param context a storage context label + * @param context a storage context label of up to 255 bytes * @param key null-terminated unique key of up to 255 bytes * @return true iff the record existed and was deleted * -- 2.1.4