@@ -364,4 +364,136 @@ public void testSubsequentProcessingInstructionMoreThan8k()
364364 assertEquals ( XmlPullParser .PROCESSING_INSTRUCTION , parser .nextToken () );
365365 assertEquals ( XmlPullParser .END_TAG , parser .nextToken () );
366366 }
367+
368+ public void testMalformedProcessingInstructionAfterTag ()
369+ throws Exception
370+ {
371+ MXParser parser = new MXParser ();
372+
373+ String input = "<project /><?>" ;
374+
375+ parser .setInput ( new StringReader ( input ) );
376+
377+ try
378+ {
379+ assertEquals ( XmlPullParser .START_TAG , parser .next () );
380+
381+ assertEquals ( XmlPullParser .END_TAG , parser .next () );
382+
383+ assertEquals ( XmlPullParser .PROCESSING_INSTRUCTION , parser .next () );
384+
385+ fail ( "Should fail since it has an invalid Processing Instruction" );
386+ }
387+ catch ( XmlPullParserException ex )
388+ {
389+ assertTrue ( ex .getMessage ().contains ( "processing instruction PITarget name not found" ) );
390+ }
391+ }
392+
393+ public void testMalformedProcessingInstructionBeforeTag ()
394+ throws Exception
395+ {
396+ MXParser parser = new MXParser ();
397+
398+ String input = "<?><project />" ;
399+
400+ parser .setInput ( new StringReader ( input ) );
401+
402+ try
403+ {
404+ assertEquals ( XmlPullParser .PROCESSING_INSTRUCTION , parser .next () );
405+
406+ assertEquals ( XmlPullParser .START_TAG , parser .next () );
407+
408+ assertEquals ( XmlPullParser .END_TAG , parser .next () );
409+
410+ fail ( "Should fail since it has invalid PI" );
411+ }
412+ catch ( XmlPullParserException ex )
413+ {
414+ assertTrue ( ex .getMessage ().contains ( "processing instruction PITarget name not found" ) );
415+ }
416+ }
417+
418+ public void testMalformedProcessingInstructionSpaceBeforeName ()
419+ throws Exception
420+ {
421+ MXParser parser = new MXParser ();
422+
423+ StringBuilder sb = new StringBuilder ();
424+ sb .append ( "<? shouldhavenospace>" );
425+ sb .append ( "<project />" );
426+
427+ parser .setInput ( new StringReader ( sb .toString () ) );
428+
429+ try
430+ {
431+ assertEquals ( XmlPullParser .PROCESSING_INSTRUCTION , parser .next () );
432+
433+ assertEquals ( XmlPullParser .START_TAG , parser .next () );
434+
435+ assertEquals ( XmlPullParser .END_TAG , parser .next () );
436+
437+ fail ( "Should fail since it has invalid PI" );
438+ }
439+ catch ( XmlPullParserException ex )
440+ {
441+ assertTrue ( ex .getMessage ().contains ( "processing instruction PITarget must be exactly after <? and not white space character" ) );
442+ }
443+ }
444+
445+ public void testMalformedProcessingInstructionNoClosingQuestionMark ()
446+ throws Exception
447+ {
448+ MXParser parser = new MXParser ();
449+
450+ StringBuilder sb = new StringBuilder ();
451+ sb .append ( "<?shouldhavenospace>" );
452+ sb .append ( "<project />" );
453+
454+ parser .setInput ( new StringReader ( sb .toString () ) );
455+
456+ try
457+ {
458+ assertEquals ( XmlPullParser .PROCESSING_INSTRUCTION , parser .next () );
459+
460+ assertEquals ( XmlPullParser .START_TAG , parser .next () );
461+
462+ assertEquals ( XmlPullParser .END_TAG , parser .next () );
463+
464+ fail ( "Should fail since it has invalid PI" );
465+ }
466+ catch ( XmlPullParserException ex )
467+ {
468+ assertTrue ( ex .getMessage ().contains ( "processing instruction started on line 1 and column 2 was not closed" ) );
469+ }
470+ }
471+
472+ public void testSubsequentMalformedProcessingInstructionNoClosingQuestionMark ()
473+ throws Exception
474+ {
475+ MXParser parser = new MXParser ();
476+
477+ StringBuilder sb = new StringBuilder ();
478+ sb .append ( "<project />" );
479+ sb .append ( "<?shouldhavenospace>" );
480+
481+ parser .setInput ( new StringReader ( sb .toString () ) );
482+
483+ try
484+ {
485+ assertEquals ( XmlPullParser .START_TAG , parser .next () );
486+
487+ assertEquals ( XmlPullParser .END_TAG , parser .next () );
488+
489+ assertEquals ( XmlPullParser .PROCESSING_INSTRUCTION , parser .next () );
490+
491+ fail ( "Should fail since it has invalid PI" );
492+ }
493+ catch ( XmlPullParserException ex )
494+ {
495+ assertTrue ( ex .getMessage ().contains ( "processing instruction started on line 1 and column 13 was not closed" ) );
496+ }
497+ }
498+
367499}
0 commit comments