[
https://issues.apache.org/jira/browse/XERCESC-1619?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Scott Cantor reassigned XERCESC-1619:
-------------------------------------
Assignee: Alberto Massari
> Allow compilation with gcc -pedantic-errors -ansi
> -------------------------------------------------
>
> Key: XERCESC-1619
> URL: https://issues.apache.org/jira/browse/XERCESC-1619
> Project: Xerces-C++
> Issue Type: Improvement
> Components: Build
> Environment: Linux (SVN revision 422672)
> Reporter: Daniel Burr
> Assignee: Alberto Massari
> Priority: Minor
>
> 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)
> {
> (val)? fFeatures |= (1<<featureId) : fFeatures &= ~(1<<featureId);
> -};
> +}
>
> inline bool DOMLSSerializerImpl::getFeature(const int featureId) const
> {
> return ((fFeatures & ( 1<<featureId )) != 0) ? true : false;
> -};
> +}
>
> 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);
> }
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]