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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-compress.git


The following commit(s) were added to refs/heads/master by this push:
     new e03b342  Address CodeQL issues in pack200/unpack200 packages.
e03b342 is described below

commit e03b342b1a514bb5dfed656c5711003e21c93353
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Tue Feb 8 21:15:23 2022 -0500

    Address CodeQL issues in pack200/unpack200 packages.
    
    Throw ArithmeticExceptioninstead of silently overflowing.
---
 .../compress/archivers/dump/TapeInputStream.java        |  3 ++-
 .../compress/archivers/tar/TarArchiveOutputStream.java  |  4 +++-
 .../compress/archivers/zip/ExplodingInputStream.java    |  3 ++-
 .../compress/compressors/deflate64/HuffmanDecoder.java  | 17 +++++++++--------
 .../org/apache/commons/compress/utils/ExactMath.java    |  9 +++++----
 5 files changed, 21 insertions(+), 15 deletions(-)

diff --git 
a/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java 
b/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java
index 006953f..8585a17 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java
@@ -26,6 +26,7 @@ import java.util.Arrays;
 import java.util.zip.DataFormatException;
 import java.util.zip.Inflater;
 
+import org.apache.commons.compress.utils.ExactMath;
 import org.apache.commons.compress.utils.IOUtils;
 
 /**
@@ -205,7 +206,7 @@ class TapeInputStream extends FilterInputStream {
             }
 
             // do not copy data but still increment counters.
-            readOffset += n;
+            readOffset = ExactMath.add(readOffset, n);
             bytes += n;
         }
 
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java
 
b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java
index 18744c9..0f49490 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java
@@ -35,6 +35,7 @@ import 
org.apache.commons.compress.archivers.ArchiveOutputStream;
 import org.apache.commons.compress.archivers.zip.ZipEncoding;
 import org.apache.commons.compress.archivers.zip.ZipEncodingHelper;
 import org.apache.commons.compress.utils.CountingOutputStream;
+import org.apache.commons.compress.utils.ExactMath;
 import org.apache.commons.compress.utils.FixedLengthBlockOutputStream;
 
 import static java.nio.charset.StandardCharsets.*;
@@ -432,7 +433,8 @@ public class TarArchiveOutputStream extends 
ArchiveOutputStream {
                 + "' before the '" + currSize
                 + "' bytes specified in the header were written");
         }
-        recordsWritten += (currSize / RECORD_SIZE);
+        recordsWritten = ExactMath.add(recordsWritten, (currSize / 
RECORD_SIZE));
+
         if (0 != currSize % RECORD_SIZE) {
             recordsWritten++;
         }
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/ExplodingInputStream.java
 
b/src/main/java/org/apache/commons/compress/archivers/zip/ExplodingInputStream.java
index 0886939..389d35f 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/zip/ExplodingInputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/zip/ExplodingInputStream.java
@@ -24,6 +24,7 @@ import java.io.InputStream;
 
 import org.apache.commons.compress.utils.CloseShieldFilterInputStream;
 import org.apache.commons.compress.utils.CountingInputStream;
+import org.apache.commons.compress.utils.ExactMath;
 import org.apache.commons.compress.utils.InputStreamStatistics;
 
 /**
@@ -200,7 +201,7 @@ class ExplodingInputStream extends InputStream implements 
InputStreamStatistics
                     // EOF
                     return;
                 }
-                length += nextByte;
+                length = ExactMath.add(length, nextByte);
             }
             length += minimumMatchLength;
 
diff --git 
a/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
 
b/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
index 65daec7..41eb834 100644
--- 
a/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
+++ 
b/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
@@ -17,8 +17,10 @@
  */
 package org.apache.commons.compress.compressors.deflate64;
 
-import org.apache.commons.compress.utils.BitInputStream;
-import org.apache.commons.compress.utils.ByteUtils;
+import static 
org.apache.commons.compress.compressors.deflate64.HuffmanState.DYNAMIC_CODES;
+import static 
org.apache.commons.compress.compressors.deflate64.HuffmanState.FIXED_CODES;
+import static 
org.apache.commons.compress.compressors.deflate64.HuffmanState.INITIAL;
+import static 
org.apache.commons.compress.compressors.deflate64.HuffmanState.STORED;
 
 import java.io.Closeable;
 import java.io.EOFException;
@@ -27,10 +29,9 @@ import java.io.InputStream;
 import java.nio.ByteOrder;
 import java.util.Arrays;
 
-import static 
org.apache.commons.compress.compressors.deflate64.HuffmanState.DYNAMIC_CODES;
-import static 
org.apache.commons.compress.compressors.deflate64.HuffmanState.FIXED_CODES;
-import static 
org.apache.commons.compress.compressors.deflate64.HuffmanState.INITIAL;
-import static 
org.apache.commons.compress.compressors.deflate64.HuffmanState.STORED;
+import org.apache.commons.compress.utils.BitInputStream;
+import org.apache.commons.compress.utils.ByteUtils;
+import org.apache.commons.compress.utils.ExactMath;
 
 class HuffmanDecoder implements Closeable {
 
@@ -325,14 +326,14 @@ class HuffmanDecoder implements Closeable {
                     final int runMask = RUN_LENGTH_TABLE[symbol - 257];
                     int run = runMask >>> 5;
                     final int runXtra = runMask & 0x1F;
-                    run += readBits(runXtra);
+                    run = ExactMath.add(run, readBits(runXtra));
 
                     final int distSym = nextSymbol(reader, distanceTree);
 
                     final int distMask = DISTANCE_TABLE[distSym];
                     int dist = distMask >>> 4;
                     final int distXtra = distMask & 0xF;
-                    dist += readBits(distXtra);
+                    dist = ExactMath.add(dist, readBits(distXtra));
 
                     if (runBuffer.length < run) {
                         runBuffer = new byte[run];
diff --git a/src/main/java/org/apache/commons/compress/utils/ExactMath.java 
b/src/main/java/org/apache/commons/compress/utils/ExactMath.java
index 860aa0d..a01d835 100644
--- a/src/main/java/org/apache/commons/compress/utils/ExactMath.java
+++ b/src/main/java/org/apache/commons/compress/utils/ExactMath.java
@@ -33,12 +33,13 @@ public class ExactMath {
     /**
      * Adds two values and throws an exception on overflow.
      *
-     * @param intValue the first value.
-     * @param longValue the second value.
+     * @param x the first value.
+     * @param y the second value.
      * @return addition of both values.
      * @throws ArithmeticException when there is an overflow.
      */
-    public static int add(final int intValue, final long longValue) {
-        return Math.addExact(intValue, Math.toIntExact(longValue));
+    public static int add(final int x, final long y) {
+        return Math.addExact(x, Math.toIntExact(y));
     }
+
 }

Reply via email to