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 2002/06/28 20:35:18 UTC

DO NOT REPLY [Bug 10337] New: - XMLString::patternMatch doesn't find pattern in particular context

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10337>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10337

XMLString::patternMatch doesn't find pattern in particular context

           Summary: XMLString::patternMatch doesn't find pattern in
                    particular context
           Product: Xerces-C++
           Version: 1.7.0
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: DOM
        AssignedTo: xerces-c-dev@xml.apache.org
        ReportedBy: jstgermain@popupsolutions.com


Xerces-C++ version 1.7.0
Windows 2000 SP1
Using Builder C++ 5

Binary distribution 

Bugged Function : XMLString::patternMatch

  example that fails:
    stringToSearch: 1234123455
    stringToFind  : 12345

  similar example that works:
    stringToSearch: 1234 123455 
    stringToFind  : 12345


When the function finds the beginning of a pattern (1234..) and finds a 
difference, it doesn't restart the pattern search on the next char but the one 
after the next.

Here is the modified function:

// Begin
int XMLString::patternMatch(        XMLCh* const    toSearch
                            , const XMLCh* const    pattern)
{
    if (!toSearch || !pattern )
        return -1;

    XMLCh* srcPtr = toSearch;
    const int patnLen = XMLString::stringLen(pattern);
    int  patnIndex = 0;
    bool patnMatch;

    while (*srcPtr)
    {
        patnMatch = (*srcPtr++ == pattern[patnIndex++]);

        if (!patnMatch)
        {
            patnIndex = 0;
            patnMatch = (*srcPtr == pattern[patnIndex++]);
        }

        if (patnMatch)
        {
            if (patnIndex == patnLen)
                // full pattern match found
                return (srcPtr - patnLen - toSearch);
        }
    }

    return -1;
}
// End

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