This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch misc-hardening__MATH-1691
in repository https://gitbox.apache.org/repos/asf/commons-math.git

commit 9c450d57c36899c2580647d8b45c3c4a594a1889
Author: Gilles Sadowski <[email protected]>
AuthorDate: Mon Sep 28 01:02:49 2026 +0200

    MATH-1691: Detect invalid dimensions (array size overflow).
    
    Found by a security scan.
---
 .../math4/legacy/field/linalg/FieldDenseMatrix.java        |  8 +++++++-
 .../legacy/field/linalg/FP64FieldDenseMatrixTest.java      | 14 ++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git 
a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/field/linalg/FieldDenseMatrix.java
 
b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/field/linalg/FieldDenseMatrix.java
index 8db234cdf..504605829 100644
--- 
a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/field/linalg/FieldDenseMatrix.java
+++ 
b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/field/linalg/FieldDenseMatrix.java
@@ -31,6 +31,8 @@ import org.apache.commons.math4.legacy.linear.AnyMatrix;
  */
 public final class FieldDenseMatrix<T>
     implements AnyMatrix {
+    /** Prevent index aliasing. */
+    private static final int MAX_ALLOC_SIZE = Integer.MAX_VALUE - 8;
     /** Field. */
     private final Field<T> field;
     /** Number of rows. */
@@ -60,11 +62,15 @@ public final class FieldDenseMatrix<T>
             c <= 0) {
             throw new IllegalArgumentException("Negative size");
         }
+        final long allocSize = (long) r * (long) c;
+        if (allocSize > MAX_ALLOC_SIZE) {
+            throw new IllegalArgumentException("Array too large");
+        }
 
         field = f;
         rows = r;
         columns = c;
-        data = (T[]) new Object[r * c];
+        data = (T[]) new Object[(int) allocSize];
     }
 
     /**
diff --git 
a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/field/linalg/FP64FieldDenseMatrixTest.java
 
b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/field/linalg/FP64FieldDenseMatrixTest.java
index 1af30fa49..339eb24f6 100644
--- 
a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/field/linalg/FP64FieldDenseMatrixTest.java
+++ 
b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/field/linalg/FP64FieldDenseMatrixTest.java
@@ -28,6 +28,20 @@ import 
org.apache.commons.math4.legacy.linear.Array2DRowRealMatrix;
  * Tests for {@link FieldDenseMatrix} (using {@link FP64} as field elements).
  */
 public class FP64FieldDenseMatrixTest {
+    @Test(expected=IllegalArgumentException.class)
+    public void testTooLargeAllocation() {
+        final int r = 1 << 16;
+        final int c = 1 << 15;
+        FieldDenseMatrix.create(FP64Field.get(), r, c);
+    }
+
+    @Test
+    public void testVeryLargeAllocation() {
+        final int r = 1 << 15;
+        final int c = 1 << 15;
+        final FieldDenseMatrix<FP64> a = 
FieldDenseMatrix.create(FP64Field.get(), r, c);
+    }
+
     @Test
     public void testGetRowDimension() {
         final int r = 6;

Reply via email to