You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by bu...@apache.org on 2001/05/09 21:13:56 UTC
[Bug 1687] New - resValue not always updated when making a transcoder
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=1687
*** shadow/1687 Wed May 9 12:13:56 2001
--- shadow/1687.tmp.12602 Wed May 9 12:13:56 2001
***************
*** 0 ****
--- 1,90 ----
+ +============================================================================+
+ | resValue not always updated when making a transcoder |
+ +----------------------------------------------------------------------------+
+ | Bug #: 1687 Product: Xerces-C |
+ | Status: NEW Version: 1.4 |
+ | Resolution: Platform: All |
+ | Severity: Minor OS/Version: All |
+ | Priority: Low Component: Utilities |
+ +----------------------------------------------------------------------------+
+ | Assigned To: xerces-c-dev@xml.apache.org |
+ | Reported By: mark_russell@csgsystems.com |
+ | CC list: Cc: |
+ +----------------------------------------------------------------------------+
+ | URL: |
+ +============================================================================+
+ | DESCRIPTION |
+ Bug found in the following function call:
+
+ XMLTranscoder*
+ XMLTransService::makeNewTranscoderFor( const XMLCh* const encodingName
+ , XMLTransService::Codes& resValue
+ , const unsigned int blockSize)
+
+ What is happening is the resValue which should give you the result of the
+ request (ie unsupportedEncoding, InternalFailure, SupportFilesNotFound, or Ok)
+ doesn't always get set. These is only one case that I have found where it
+ actually gets set and that is in the case of an unsupported encoding. (I gave
+ the function "UTF16" as the encoding name which doesn't actually correspond to
+ anything right now).
+
+ If I give the function a valid encodingName then resValue never gets modified.
+ Thus if you depend on the resValue to tell you if the call succeeded or not you
+ will not always get a valid value back.
+
+ The offending code in the function:
+
+ // If we found it, then call the factory method for it
+ if (ourMapping)
+ return ourMapping->makeNew(blockSize);
+
+ //
+ // For now, we have a little list of encodings that we disallow
+ // explicitly. So lets check for them up front. They all start with
+ // IBM, so we can do a quick check to see if we should even do
+ // anything at all.
+ //
+ if (XMLString::startsWith(upBuf, gDisallowPre))
+ {
+ for (unsigned int index = 0; index < gDisallowListSize; index++)
+ {
+ // If its one of our guys, then pretend we don't understand it
+ if (!XMLString::compareString(upBuf, gDisallowList[index]))
+ return 0;
+ }
+ }
+
+
+ Just prior to each of the return values there needs to be a statement to set
+ the resValue to something. One possible solution:
+
+ // If we found it, then call the factory method for it
+ if (ourMapping){
+ XMLTranscoder* temp = ourMapping->makeNew(blockSize);
+ if(temp == 0)
+ resValue = XMLTransService::InternalFailure;
+ else
+ resValue = XMLTransService::Ok;
+ return temp;
+ }
+
+ //
+ // For now, we have a little list of encodings that we disallow
+ // explicitly. So lets check for them up front. They all start with
+ // IBM, so we can do a quick check to see if we should even do
+ // anything at all.
+ //
+ if (XMLString::startsWith(upBuf, gDisallowPre))
+ {
+ for (unsigned int index = 0; index < gDisallowListSize; index++)
+ {
+ // If its one of our guys, then pretend we don't understand it
+ if (!XMLString::compareString(upBuf, gDisallowList[index]))
+ resValue = XMLTransService::UnsupportedEncoding;
+ return 0;
+ }
+ }
+
+
+ By first creating the XMLTranscoder pointer we can test for it's validity.
+ That way resValue can get a value thats appropriate.
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org