@Override
public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
//A 16-bit signed integer that defines the number of points in the array.
- int numberofPoints = leis.readShort();
+ int numberOfPoints = leis.readShort();
- poly = new Path2D.Double(Path2D.WIND_EVEN_ODD, numberofPoints);
- for (int i=0; i<numberofPoints; i++) {
+ poly = new Path2D.Double(Path2D.WIND_EVEN_ODD, numberOfPoints);
+ for (int i=0; i<numberOfPoints; i++) {
// A 16-bit signed integer that defines the horizontal (x) coordinate of the point.
int x = leis.readShort();
// A 16-bit signed integer that defines the vertical (y) coordinate of the point.
}
}
- if (addClose()) {
+ if (numberOfPoints > 0 && addClose()) {
// polygons are closed / polylines not
poly.closePath();
}
- return LittleEndianConsts.SHORT_SIZE+numberofPoints*LittleEndianConsts.INT_SIZE;
+ return LittleEndianConsts.SHORT_SIZE+numberOfPoints*LittleEndianConsts.INT_SIZE;
}
@Override
import org.apache.poi.util.RecordFormatException;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
public class TestHwmfParsing {
// for manual mass parsing and rendering tests of .wmfs use HemfPictureTest.paint() !
// ******************************************************************************
- @Test
- public void parse() throws IOException {
- try (InputStream fis = samples.openResourceAsStream("santa.wmf")) {
+ @ParameterizedTest
+ @CsvSource({
+ "santa.wmf, 581",
+ /* Bug 65063 */
+ "empty-polygon-close.wmf, 272"
+ })
+ public void parse(String file, int recordCnt) throws IOException {
+ try (InputStream fis = samples.openResourceAsStream(file)) {
HwmfPicture wmf = new HwmfPicture(fis);
List<HwmfRecord> records = wmf.getRecords();
- assertEquals(581, records.size());
+ assertEquals(recordCnt, records.size());
}
}