| 2675 | } |
| 2676 | |
| 2677 | static enum XML_Error PTRCALL |
| 2678 | externalEntityInitProcessor3(XML_Parser parser, const char *start, |
| 2679 | const char *end, const char **endPtr) { |
| 2680 | int tok; |
| 2681 | const char *next = start; /* XmlContentTok doesn't always set the last arg */ |
| 2682 | parser->m_eventPtr = start; |
| 2683 | tok = XmlContentTok(parser->m_encoding, start, end, &next); |
| 2684 | /* Note: These bytes are accounted later in: |
| 2685 | - processXmlDecl |
| 2686 | - externalEntityContentProcessor |
| 2687 | */ |
| 2688 | parser->m_eventEndPtr = next; |
| 2689 | |
| 2690 | switch (tok) { |
| 2691 | case XML_TOK_XML_DECL: { |
| 2692 | enum XML_Error result; |
| 2693 | result = processXmlDecl(parser, 1, start, next); |
| 2694 | if (result != XML_ERROR_NONE) |
| 2695 | return result; |
| 2696 | switch (parser->m_parsingStatus.parsing) { |
| 2697 | case XML_SUSPENDED: |
| 2698 | *endPtr = next; |
| 2699 | return XML_ERROR_NONE; |
| 2700 | case XML_FINISHED: |
| 2701 | return XML_ERROR_ABORTED; |
| 2702 | default: |
| 2703 | start = next; |
| 2704 | } |
| 2705 | } break; |
| 2706 | case XML_TOK_PARTIAL: |
| 2707 | if (! parser->m_parsingStatus.finalBuffer) { |
| 2708 | *endPtr = start; |
| 2709 | return XML_ERROR_NONE; |
| 2710 | } |
| 2711 | return XML_ERROR_UNCLOSED_TOKEN; |
| 2712 | case XML_TOK_PARTIAL_CHAR: |
| 2713 | if (! parser->m_parsingStatus.finalBuffer) { |
| 2714 | *endPtr = start; |
| 2715 | return XML_ERROR_NONE; |
| 2716 | } |
| 2717 | return XML_ERROR_PARTIAL_CHAR; |
| 2718 | } |
| 2719 | parser->m_processor = externalEntityContentProcessor; |
| 2720 | parser->m_tagLevel = 1; |
| 2721 | return externalEntityContentProcessor(parser, start, end, endPtr); |
| 2722 | } |
| 2723 | |
| 2724 | static enum XML_Error PTRCALL |
| 2725 | externalEntityContentProcessor(XML_Parser parser, const char *start, |
no test coverage detected