@@ -726,6 +726,58 @@ public void testSubsequentMalformedProcessingInstructionNoClosingQuestionMark()
726726 *
727727 * @throws java.lang.Exception if any.
728728 */
729+ @ Test
730+ public void testSubsequentAbortedProcessingInstruction ()
731+ throws Exception
732+ {
733+ MXParser parser = new MXParser ();
734+ StringBuilder sb = new StringBuilder ();
735+ sb .append ( "<project />" );
736+ sb .append ( "<?aborted" );
737+
738+ parser .setInput ( new StringReader ( sb .toString () ) );
739+
740+ try
741+ {
742+ assertEquals ( XmlPullParser .START_TAG , parser .next () );
743+ assertEquals ( XmlPullParser .END_TAG , parser .next () );
744+ assertEquals ( XmlPullParser .PROCESSING_INSTRUCTION , parser .next () );
745+
746+ fail ( "Should fail since it has aborted PI" );
747+ }
748+ catch ( XmlPullParserException ex )
749+ {
750+ assertTrue ( ex .getMessage ().contains ( "@1:21" ) );
751+ assertTrue ( ex .getMessage ().contains ( "processing instruction started on line 1 and column 12 was not closed" ) );
752+ }
753+ }
754+
755+ @ Test
756+ public void testSubsequentAbortedComment ()
757+ throws Exception
758+ {
759+ MXParser parser = new MXParser ();
760+ StringBuilder sb = new StringBuilder ();
761+ sb .append ( "<project />" );
762+ sb .append ( "<!-- aborted" );
763+
764+ parser .setInput ( new StringReader ( sb .toString () ) );
765+
766+ try
767+ {
768+ assertEquals ( XmlPullParser .START_TAG , parser .next () );
769+ assertEquals ( XmlPullParser .END_TAG , parser .next () );
770+ assertEquals ( XmlPullParser .PROCESSING_INSTRUCTION , parser .next () );
771+
772+ fail ( "Should fail since it has aborted comment" );
773+ }
774+ catch ( XmlPullParserException ex )
775+ {
776+ assertTrue ( ex .getMessage ().contains ( "@1:24" ) );
777+ assertTrue ( ex .getMessage ().contains ( "comment started on line 1 and column 12 was not closed" ) );
778+ }
779+ }
780+
729781 @ Test
730782 public void testMalformedXMLRootElement ()
731783 throws Exception
0 commit comments