Skip to content

Commit b1b438e

Browse files
Fix NPE in Matrix constructors (#743)
1 parent 3d5463e commit b1b438e

1 file changed

Lines changed: 25 additions & 13 deletions

File tree

  • wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks

wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks/Matrix.java

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,21 @@
2222

2323
import org.verapdf.cos.COSArray;
2424
import org.verapdf.cos.COSBase;
25+
import org.verapdf.cos.COSObject;
2526
import org.verapdf.wcag.algorithms.entities.geometry.BoundingBox;
2627
import org.verapdf.wcag.algorithms.entities.geometry.Vertex;
2728

2829
import java.util.ArrayList;
2930
import java.util.Arrays;
3031
import java.util.List;
32+
import java.util.logging.Level;
33+
import java.util.logging.Logger;
3134

3235
/**
3336
* @author Maxim Plushchov
3437
*/
3538
public class Matrix implements Cloneable {
39+
private static final Logger LOGGER = Logger.getLogger(Matrix.class.getCanonicalName());
3640

3741
private static final int SIZE = 6;
3842
private double[] matrixArray;
@@ -47,22 +51,30 @@ public Matrix(double[] src) {
4751

4852
public Matrix(COSArray array) {
4953
matrixArray = new double[SIZE];
50-
matrixArray[0] = array.at(0).getReal();
51-
matrixArray[1] = array.at(1).getReal();
52-
matrixArray[2] = array.at(2).getReal();
53-
matrixArray[3] = array.at(3).getReal();
54-
matrixArray[4] = array.at(4).getReal();
55-
matrixArray[5] = array.at(5).getReal();
54+
for (int i = 0; i < SIZE; i++) {
55+
COSObject arg = array.at(i);
56+
Double d = (arg != null) ? arg.getReal() : null;
57+
if (d == null) {
58+
matrixArray = new double[] {1, 0, 0, 1, 0, 0};
59+
LOGGER.log(Level.WARNING,"Invalid matrix value. Defaulting to matrix [1,0,0,1,0,0].");
60+
return;
61+
}
62+
matrixArray[i] = d;
63+
}
5664
}
5765

5866
public Matrix(List<COSBase> arguments) {
59-
matrixArray = new double[SIZE];
60-
matrixArray[0] = arguments.get(0).getReal();
61-
matrixArray[1] = arguments.get(1).getReal();
62-
matrixArray[2] = arguments.get(2).getReal();
63-
matrixArray[3] = arguments.get(3).getReal();
64-
matrixArray[4] = arguments.get(4).getReal();
65-
matrixArray[5] = arguments.get(5).getReal();
67+
matrixArray = new double[SIZE];
68+
for (int i = 0; i < SIZE; i++) {
69+
COSBase arg = arguments.get(i);
70+
Double d = (arg != null) ? arg.getReal() : null;
71+
if (d == null) {
72+
matrixArray = new double[] {1, 0, 0, 1, 0, 0};
73+
LOGGER.log(Level.WARNING,"Invalid matrix value. Defaulting to matrix [1,0,0,1,0,0].");
74+
return;
75+
}
76+
matrixArray[i] = d;
77+
}
6678
}
6779

6880
public Matrix(double a, double b, double c, double d, double e, double f) {

0 commit comments

Comments
 (0)