Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
-
None
-
Linux (SVN revision 422672)
Description
First problem is a couple of stray semi-colons:
— src/xercesc/dom/impl/DOMLSSerializerImpl.hpp (revision 422672)
+++ src/xercesc/dom/impl/DOMLSSerializerImpl.hpp (working copy)
@@ -214,12 +214,12 @@
, bool val)
;
+}
inline bool DOMLSSerializerImpl::getFeature(const int featureId) const
;
+}
inline void DOMLSSerializerImpl::setURCharRef()
{ gcc complains about a missing return value here: --- src/xercesc/util/XMLNumber.cpp (revision 422672) +++ src/xercesc/util/XMLNumber.cpp (working copy) @@ -88,7 +88,7 @@ return 0; break; }-
+ return NULL;
}
Sometimes TOP_LEVEL_SCOPE is passed as argument 3 of RefHash3KeysIdPool::getByKey() which is signed, causing gcc to complain that there is an implicit conversion from unsigned to signed. Fix:
— src/xercesc/validators/common/Grammar.hpp (revision 422672)
+++ src/xercesc/validators/common/Grammar.hpp (working copy)
@@ -67,7 +67,7 @@
// These are well-known values that must simply be larger
// than any reasonable scope
UNKNOWN_SCOPE = UINT_MAX - 0
- , TOP_LEVEL_SCOPE = UINT_MAX - 1
+ , TOP_LEVEL_SCOPE = INT_MAX - 1
};
// -----------------------------------------------------------------------
Lastly, C99 can not have variable sized arrays allocated on the stack:
— src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp (revision 422672)
+++ src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp (working copy)
@@ -239,7 +239,9 @@
if (ch <= 0x7F)
return toupper(ch);
- char wcbuf[fUChSize * 2];
+ char* wcbuf = new char[fUChSize << 1];
+ if(!wcbuf) return 0;
+
xmlChToMbc (ch, wcbuf);
char tmpArr[4];
@@ -250,8 +252,11 @@
ICONV_LOCK;
if (::iconv (fCDTo, &ptr, &len,
- &pTmpArr, &bLen) == (size_t) -1)
- return 0;
+ &pTmpArr, &bLen) == (size_t) -1) { + delete[] wcbuf; + return 0; + }
+
tmpArr[1] = toupper (*((unsigned char *)tmpArr));
*tmpArr = tmpArr[1];
len = 1;
@@ -259,9 +264,12 @@
bLen = fUChSize;
ptr = tmpArr;
if (::iconv (fCDFrom, &ptr, &len,
- &pTmpArr, &bLen) == (size_t) -1)
- return 0;
+ &pTmpArr, &bLen) == (size_t) -1) {+ delete[] wcbuf;+ return 0;+ }mbcToXMLCh (wcbuf, (XMLCh*) &ch);
+ delete[] wcbuf;
return ch;
}
@@ -271,7 +279,9 @@
if (ch <= 0x7F)
return tolower(ch);
- char wcbuf[fUChSize * 2];
+ char* wcbuf = new char[fUChSize << 1];
+ if(!wcbuf) return 0;
+
xmlChToMbc (ch, wcbuf);
char tmpArr[4];
@@ -282,8 +292,10 @@
ICONV_LOCK;
if (::iconv (fCDTo, &ptr, &len,
- &pTmpArr, &bLen) == (size_t) -1)
- return 0;
+ &pTmpArr, &bLen) == (size_t) -1) { + delete[] wcbuf; + return 0; + }
tmpArr[1] = tolower (((unsigned char)tmpArr));
*tmpArr = tmpArr[1];
len = 1;
@@ -291,9 +303,12 @@
bLen = fUChSize;
ptr = tmpArr;
if (::iconv (fCDFrom, &ptr, &len,
- &pTmpArr, &bLen) == (size_t) -1)
- return 0;
+ &pTmpArr, &bLen) == (size_t) -1) {+ delete[] wcbuf;+ return 0;+ }mbcToXMLCh (wcbuf, (XMLCh*) &ch);
+ delete[] wcbuf;
return ch;
}
@@ -303,8 +318,9 @@
if (toCheck <= 0x7F)
return isspace(toCheck);
- char wcbuf[fUChSize * 2];
char tmpArr[4];
+ char* wcbuf = new char[fUChSize << 1];
+ if(!wcbuf) return 0;
xmlChToMbc (toCheck, wcbuf);
char* ptr = wcbuf;
@@ -315,9 +331,12 @@
{
ICONV_LOCK;
if (::iconv (fCDTo, &ptr, &len,
- &pTmpArr, &bLen) == (size_t) -1)
+ &pTmpArr, &bLen) == (size_t) -1) { + delete[] wcbuf; return 0; + }}
+ delete[] wcbuf;
return isspace(*tmpArr);
}
@@ -1153,7 +1172,9 @@
// If the passed value is really a surrogate embedded together, then
// we need to break it out into its two chars. Else just one.
//
- char srcBuf[2 * uChSize()];
+ char* srcBuf = new char[uChSize() << 1];
+ if(!srcBuf) return 0;
+
unsigned int srcCount = 1;
if (toCheck & 0xFFFF0000) { XMLCh ch1 = (toCheck >> 10) + 0xD800; @@ -1168,6 +1189,7 @@ char* pTmpBuf = tmpBuf; size_t rc = iconvTo( srcBuf, &len, &pTmpBuf, 64); + delete[] srcBuf; return (rc != (size_t)-1) && (len == 0); }