瀏覽代碼

HPCC-17039 Switch StringAttr to use size_t

This addresses some coverity warnings about potential truncations, and is
liable to be marginally more efficient.

Also changed format mismatch warnings to be fatal, because it made testing
this change easier and seems like a good thing to do anyway.

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 8 年之前
父節點
當前提交
99d8a06aca

+ 1 - 1
cmake_modules/commonSetup.cmake

@@ -365,7 +365,7 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
 
     if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX)
       message ("Using compiler: ${CMAKE_CXX_COMPILER_ID} :: ${CMAKE_CXX_COMPILER_VERSION} :: ${CLANG_VERSION} :: ${APPLE_CLANG_VERSION}")
-      SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frtti -fPIC -fmessage-length=0 -Wformat -Wformat-security -Wformat-nonliteral -pthread -Wuninitialized")
+      SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frtti -fPIC -fmessage-length=0 -Werror=format -Wformat-security -Wformat-nonliteral -pthread -Wuninitialized")
       SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -rdynamic")
       SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g -fno-inline-functions")
       if (CMAKE_COMPILER_IS_GNUCXX)

+ 2 - 2
common/remote/rmtsmtp.cpp

@@ -484,7 +484,7 @@ public:
         warnings = _warnings;
         CSMTPValidator validator;
         if(strlen(senderHeader) + sender.length() > 998)
-            throw MakeStringException(0, "email sender address too long: %u characters", sender.length());
+            throw MakeStringException(0, "email sender address too long: %" I64F "u characters",  static_cast<__uint64>(sender.length()));
         validator.validateAddress(sender.get(), "email sender address");
 
         getRecipients(validator, _to);
@@ -492,7 +492,7 @@ public:
             throw MakeStringException(0, "Email recipient address list too long: %u characters", to.length());
 
         if(strlen(subjectHeader) + subject.length() > 998)
-            throw MakeStringException(0, "Email subject too long: %u characters", subject.length());
+            throw MakeStringException(0, "Email subject too long: %" I64F "u characters",  static_cast<__uint64>(subject.length()));
         validator.validateValue(subject.get(), "email subject");
     }
 

+ 2 - 2
common/thorhelper/roxiehelper.cpp

@@ -1768,7 +1768,7 @@ void CSafeSocket::flush()
         if (!adaptiveRoot || mlResponseFmt != MarkupFmt_JSON)
         {
             if (traceLevel > 5)
-                DBGLOG("Writing content head length %d to HTTP socket", contentHead.length());
+                DBGLOG("Writing content head length %" I64F "u to HTTP socket", static_cast<__uint64>(contentHead.length()));
             sock->write(contentHead.str(), contentHead.length());
             sent += contentHead.length();
         }
@@ -1783,7 +1783,7 @@ void CSafeSocket::flush()
         if (!adaptiveRoot || mlResponseFmt != MarkupFmt_JSON)
         {
             if (traceLevel > 5)
-                DBGLOG("Writing content tail length %d to HTTP socket", contentTail.length());
+                DBGLOG("Writing content tail length %" I64F "u to HTTP socket", static_cast<__uint64>(contentTail.length()));
             sock->write(contentTail.str(), contentTail.length());
             sent += contentTail.length();
         }

+ 4 - 4
system/jlib/jptree.cpp

@@ -1834,7 +1834,7 @@ IPropertyTree *PTree::addPropTree(const char *xpath, IPropertyTree *val)
         else
         {
             aindex_t pos = (aindex_t)-1;
-            if (qualifier.length())
+            if (!qualifier.isEmpty())
             {
                 pos = ((PTree *)child)->getChildMatchPos(qualifier);
                 if ((aindex_t) -1 == pos)
@@ -2625,7 +2625,7 @@ void PTree::deserialize(MemoryBuffer &src)
     {
         size32_t pos = src.getPos();
         src.read(eName);
-        if (!eName.length())
+        if (eName.isEmpty())
             break;
         src.reset(pos); // reset to re-read tree name
         IPropertyTree *child = create(src);
@@ -2648,7 +2648,7 @@ void PTree::deserializeSelf(MemoryBuffer &src)
     loop
     {
         src.read(attrName);
-        if (!attrName.length())
+        if (attrName.isEmpty())
             break;
         src.read(attrValue);
         setProp(attrName, attrValue);
@@ -3650,7 +3650,7 @@ void _synchronizePTree(IPropertyTree *target, IPropertyTree *source)
         }
         else
         {
-            if (!firstOfType.length() || 0 != strcmp(firstOfType, e.queryName()))
+            if (firstOfType.isEmpty() || 0 != strcmp(firstOfType, e.queryName()))
             {
                 if (firstOfType.length() && srcTypeIter)
                 {

+ 2 - 2
system/jlib/jstring.cpp

@@ -1290,7 +1290,7 @@ StringAttr::StringAttr(const char * _text)
   text = _text ? strdup(_text) : NULL;
 }
 
-StringAttr::StringAttr(const char * _text, unsigned _len)
+StringAttr::StringAttr(const char * _text, size_t _len)
 {
     text = NULL;
     set(_text, _len);
@@ -1323,7 +1323,7 @@ void StringAttr::set(const char * _text)
     free(oldtext);
 }
 
-void StringAttr::set(const char * _text, unsigned _len)
+void StringAttr::set(const char * _text, size_t _len)
 {
     char * oldtext = text;
     text = (char *)malloc(_len+1);

+ 3 - 3
system/jlib/jstring.hpp

@@ -250,7 +250,7 @@ class jlib_decl StringAttr
 {
 public:
     inline StringAttr(void)                     { text = NULL; }
-    StringAttr(const char * _text, unsigned _len);
+    StringAttr(const char * _text, size_t _len);
     StringAttr(const char * _text);
     StringAttr(const StringAttr & src);
     StringAttr(StringAttr && src);
@@ -261,13 +261,13 @@ public:
     inline void clear()                         { setown(NULL); }
     inline char * detach()                      { char * ret = text; text = NULL; return ret; }
     inline const char * get() const             { return text; }
-    inline size32_t     length() const          { return text ? (size32_t)strlen(text) : 0; }
+    inline size_t length() const                { return text ? strlen(text) : 0; }
     inline bool isEmpty() const                 { return !text||!*text; } // faster than (length==0)
     inline const char * str() const             { return text ? text : ""; } // safe form (doesn't return NULL)
 
     void         set(const char * _text);
     void         setown(const char * _text);
-    void         set(const char * _text, unsigned _len);
+    void         set(const char * _text, size_t _len);
     void         set(const StringBuffer & source);
     void         setown(StringBuffer & source);
     void         toLowerCase();