From 66b57ef5dbc1981be3bcd98b54d45e2c767b9b31 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Fri, 31 Jul 2026 13:54:05 +0300 Subject: [PATCH 1/2] Fix NPE in Matrix constructors --- .../gf/model/factory/chunks/Matrix.java | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks/Matrix.java b/wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks/Matrix.java index da5cc0a6c..ce01774f8 100644 --- a/wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks/Matrix.java +++ b/wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks/Matrix.java @@ -22,17 +22,21 @@ import org.verapdf.cos.COSArray; import org.verapdf.cos.COSBase; +import org.verapdf.cos.COSObject; import org.verapdf.wcag.algorithms.entities.geometry.BoundingBox; import org.verapdf.wcag.algorithms.entities.geometry.Vertex; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @author Maxim Plushchov */ public class Matrix implements Cloneable { + private static final Logger LOGGER = Logger.getLogger(Matrix.class.getCanonicalName()); private static final int SIZE = 6; private double[] matrixArray; @@ -47,22 +51,32 @@ public Matrix(double[] src) { public Matrix(COSArray array) { matrixArray = new double[SIZE]; - matrixArray[0] = array.at(0).getReal(); - matrixArray[1] = array.at(1).getReal(); - matrixArray[2] = array.at(2).getReal(); - matrixArray[3] = array.at(3).getReal(); - matrixArray[4] = array.at(4).getReal(); - matrixArray[5] = array.at(5).getReal(); + for (int i = 0; i < SIZE; i++) { + COSObject arg = array.at(i); + Double d = (arg != null) ? arg.getReal() : null; + if (d == null) { + matrixArray = new double[] {1, 0, 0, 1, 0, 0}; + LOGGER.log(Level.WARNING,"Null real value for matrix argument at index {} in COSArray. " + + "Defaulting to matrix [1,0,0,1,0,0].", i); + return; + } + matrixArray[i] = d; + } } public Matrix(List arguments) { - matrixArray = new double[SIZE]; - matrixArray[0] = arguments.get(0).getReal(); - matrixArray[1] = arguments.get(1).getReal(); - matrixArray[2] = arguments.get(2).getReal(); - matrixArray[3] = arguments.get(3).getReal(); - matrixArray[4] = arguments.get(4).getReal(); - matrixArray[5] = arguments.get(5).getReal(); + matrixArray = new double[SIZE]; + for (int i = 0; i < SIZE; i++) { + COSBase arg = arguments.get(i); + Double d = (arg != null) ? arg.getReal() : null; + if (d == null) { + matrixArray = new double[] {1, 0, 0, 1, 0, 0}; + LOGGER.log(Level.WARNING,"Null real value for matrix argument at index {} in List of arguments. " + + "Defaulting to matrix [1,0,0,1,0,0].", i); + return; + } + matrixArray[i] = d; + } } public Matrix(double a, double b, double c, double d, double e, double f) { From c5a43974c2dd3c8d1428ff2aade108787d2d37a8 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Fri, 31 Jul 2026 13:58:12 +0300 Subject: [PATCH 2/2] Update Matrix.java --- .../main/java/org/verapdf/gf/model/factory/chunks/Matrix.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks/Matrix.java b/wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks/Matrix.java index ce01774f8..8e39ddc76 100644 --- a/wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks/Matrix.java +++ b/wcag-validation/src/main/java/org/verapdf/gf/model/factory/chunks/Matrix.java @@ -56,7 +56,7 @@ public Matrix(COSArray array) { Double d = (arg != null) ? arg.getReal() : null; if (d == null) { matrixArray = new double[] {1, 0, 0, 1, 0, 0}; - LOGGER.log(Level.WARNING,"Null real value for matrix argument at index {} in COSArray. " + + LOGGER.log(Level.WARNING,"Null real value for matrix argument at index {0} in COSArray. " + "Defaulting to matrix [1,0,0,1,0,0].", i); return; } @@ -71,7 +71,7 @@ public Matrix(List arguments) { Double d = (arg != null) ? arg.getReal() : null; if (d == null) { matrixArray = new double[] {1, 0, 0, 1, 0, 0}; - LOGGER.log(Level.WARNING,"Null real value for matrix argument at index {} in List of arguments. " + + LOGGER.log(Level.WARNING,"Null real value for matrix argument at index {0} in List of arguments. " + "Defaulting to matrix [1,0,0,1,0,0].", i); return; }