FOP-3321: Improve error message when invalid PS setpagedevice used
diff --git a/src/main/java/org/apache/xmlgraphics/ps/PSDictionary.java b/src/main/java/org/apache/xmlgraphics/ps/PSDictionary.java index 965d694..5a95196 100644 --- a/src/main/java/org/apache/xmlgraphics/ps/PSDictionary.java +++ b/src/main/java/org/apache/xmlgraphics/ps/PSDictionary.java
@@ -195,6 +195,9 @@ throw new PSDictionaryFormatException("Failed to parse object key"); } Token valueToken = nextToken(str, keyToken.endIndex + 1); + if (valueToken == null) { + throw new PSDictionaryFormatException("Failed to parse object value"); + } String[] braces = null; for (String[] brace : BRACES) { if (valueToken.value.startsWith(brace[OPENING])) {
diff --git a/src/test/java/org/apache/xmlgraphics/ps/PSDictionaryTestCase.java b/src/test/java/org/apache/xmlgraphics/ps/PSDictionaryTestCase.java new file mode 100644 index 0000000..5ee0a6b --- /dev/null +++ b/src/test/java/org/apache/xmlgraphics/ps/PSDictionaryTestCase.java
@@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.xmlgraphics.ps; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.function.ThrowingRunnable; + +public class PSDictionaryTestCase { + @Test + public void testInvalidMediaPosition() { + Exception ex = Assert.assertThrows(PSDictionaryFormatException.class, new ThrowingRunnable() { + public void run() throws Throwable { + PSDictionary.valueOf("<![CDATA[ << /MediaPosition >> ]] >"); + } + }); + Assert.assertEquals("Failed to parse object value", ex.getMessage()); + } +}