Ignore:
Timestamp:
Dec 12, 2012, 6:10:33 PM (6 years ago)
Author:
cameron
Message:

Various fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icXML/icXML-devel/src/icxmlc/XMLParserImpl.c

    r2728 r2774  
    77/*
    88 * @author Nigel Medforth, nigelm -at- interational-characters.com
    9  * @version $Id: XMLParserImpl.c 207 2012-12-02 20:38:22Z robc $
     9 * @version $Id: XMLParserImpl.c 224 2012-12-12 03:31:56Z nigelm $
    1010 *
    1111 */
     
    613613                /// ------------------------------------------------------------------------ ///
    614614                case ProcessingInstruction:
     615
    615616                        if ((docStateType == XMLParser::Prolog) || (docStateType == XMLParser::Element) || (docStateType == XMLParser::Miscellaneous))
    616617                        {
    617                                 XMLSymbol * target = getSymbol(fSymbolIdx);
    618 
    619                                 DEBUG_TRANSITION_MESSAGE
    620                                 (
    621                                         " --- atProcessingInstruction="
     618                const XMLCh * target = ++fCursorPtr;
     619
     620                DEBUG_TRANSITION_MESSAGE
     621                (
     622                    " --- atProcessingInstruction="
    622623                    << target
    623                                         << " idx="
    624                                         << fSymbolIdx
    625                                 );
     624                );
     625
     626                fCursorPtr += getStringLength(fCursorPtr, fCurrentStringEndPtr);
    626627
    627628                                // When we get a pi, the pi string will read "data?"; we adjust for this and replace the
     
    633634
    634635                                // <?xml ... ?> is allowed if and only if we're in the prolog
    635                                 if (unlikely(target->isXML()))
     636                if (unlikely(XMLStringU::isXML(target)))
    636637                                {
    637638                                        fScanner->emitError(XMLErrs::NoPIStartsWithXML);
     
    642643                                }
    643644
    644                                 fSymbolIdx++;
    645645                                fCursorPtr += length + 1;
    646646                        }
     
    670670                /// ------------------------------------------------------------------------ ///
    671671                case CDATA:
    672                         if ((docStateType == XMLParser::Prolog) || (docStateType == XMLParser::Element) || (docStateType == XMLParser::Miscellaneous))
     672            if (docStateType == XMLParser::Element)
    673673                        {
    674674                                //   v
    675675                                // <![CDATA[ ... ]]>
    676 
    677                                 if (docStateType != XMLParser::Element)
    678                                 {
    679                                         fScanner->emitError(XMLErrs::ExpectedCommentOrPI);
    680                                         return XMLParser::EndOfDocumentSection;
    681                                 }
    682676
    683677                                if (unlikely(!XMLStringU::isCDATA(++fCursorPtr)))
     
    706700                                fCursorPtr += length + 1;
    707701                        }
     702            else
     703            {
     704                fScanner->emitError(XMLErrs::ExpectedCommentOrPI);
     705                return XMLParser::EndOfDocumentSection;
     706            }
    708707                        break;
    709708                default:
     
    10411040                                /// ------------------------------------------------------------------------ ///
    10421041                                case ProcessingInstruction:
    1043                                         symbolIdx++;
     1042                    stringEndPtr++;
    10441043                                case Comment:
    10451044                                case CDATA:
    1046                     #ifdef PRINT_DEBUG_MESSAGE
    1047                     DEBUG_TRANSITION_MESSAGE(" --- atCDCtPI " << cursorPtr);
    1048                                         cursorPtr = *stringEndPtr++ + 1;
    1049                                         #else
    1050                                         stringEndPtr++;
    1051                                         #endif
     1045                    DEBUG_TRANSITION_MESSAGE(" --- atCDCtPI " << cursorPtr);                                   
     1046                    stringEndPtr++;
    10521047                                        break;
    10531048                                default:
Note: See TracChangeset for help on using the changeset viewer.