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 Martin Schäfer <Ma...@cadcorp.com> on 2002/10/10 10:32:55 UTC

BUG REPORTS

Hi,

I want to report some bugs I've found in xerces-c.
I DID try to use bugzilla, but I never received an
email back with a password for entering bugs. I used
the code from release 2.1.0.

1) Our XML and XSD documents are created on demand
by an ISAPI. Typically an XML document starts like
this:

<?xml version="1.0" encoding="UTF-8" ?>
<wfs:FeatureCollection
 xmlns:wfs="http://www.my-namespace.com/wfs"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.my-namespace.com/wfs http://www.my-host.com/isapi.dll?request=DescribeFeatureType&amp;service=WFS&amp;version=1.0.0&amp;typename=MyType">

When the XML document is parsed with schema validation,
the parser tries and fails to load the XSD document
referenced in the xsi:schemaLocation attribute.

The problem lies in the '&amp;' entities in the URL.
The parser properly converts the '&amp;' entities into '&'
characters, but it inserts a 0xFFFF character immediately
before the '&' as a flag for some other purpose. But when
the URL is being opened the 0xFFFF character is still there
and the resource can't be found.

I fixed this bug in XMLScanner2.cpp:

void XMLScanner::normalizeURI(const XMLCh* const systemURI,
                              XMLBuffer& normalizedURI)
{
    const XMLCh* pszSrc = systemURI;

    normalizedURI.reset();

    while (*pszSrc) {
        if ((*(pszSrc) == chPercent)
        &&  (*(pszSrc+1) == chDigit_2)
        &&  (*(pszSrc+2) == chDigit_0))
        {
            pszSrc += 3;
            normalizedURI.append(chSpace);
        }
        else if (*pszSrc == 0xFFFF) { // added MS
            pszSrc++;                 // added MS
        }                             // added MS
        else {
            normalizedURI.append(*pszSrc);
            pszSrc++;
        }
    }
}

2) Since the XSD documents are dynamic, I need to
extract information from the SchemaGrammar object
in order to interpret the XML document correctly.

For example: I need access to
DecimalDatatypeValidator::getFractionDigits()
in order to decide whether to implement this type
as double or long. But 'getFractionDigits()' is
private, so I can't access it. I can't think of
any good reason why accessor methods like these
should be private, so please make them all public.

3) QName's copy constructor is implemented incorrectly:
    QName(const QName* const qname);
should be 
    QName(const QName& qname);
instead. At the moment there's a compiler-generated
copy constructor that obviously doesn't do the right
thing.

Also the comparison operator
    bool operator==(const QName&);
should be declared const:
    bool operator==(const QName&) const;

Bye,

Martin Schäfer

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org