anshuksi282-ksolves opened a new pull request, #8622:
URL: https://github.com/apache/hadoop/pull/8622

   ## Description of PR
   This PR fixes HADOOP-18896.
   
   The buffer size in `FSOutputSummer` is computed as 
`sum.getBytesPerChecksum() * BUFFER_NUM_CHUNKS`. When
   `file.bytes-per-checksum` is configured to a very large value (e.g. 
238609295), this multiplication overflows a signed 32-bit int and wraps around 
to a negative number, causing a `NegativeArraySizeException` when allocating 
the internal buffer array.
   
   This PR adds a `Preconditions.checkArgument` check in the `FSOutputSummer` 
constructor to validate that the computed buffer size is positive, failing fast 
with a clear `IllegalArgumentException` instead of an obscure 
`NegativeArraySizeException`.
   
   This continues the work started in #6064 by @teamconfx, which went stale. 
This PR additionally adds a unit test, as the original PR's `test4tests` check 
had failed for not including one.
   
   ### How was this patch tested?
   - Added a new test class `TestFSOutputSummer` in `hadoop-common` with 
`testLargeBytesPerChecksumOverflow`, using     a minimal concrete subclass of 
`FSOutputSummer` to verify the constructor fails with 
`IllegalArgumentException` (rather than `NegativeArraySizeException`) when 
`bytesPerChecksum * BUFFER_NUM_CHUNKS` overflows.
   - Verified the test fails with the original `NegativeArraySizeException` 
when the fix is reverted, and passes with the fix applied.
   - `mvn -pl hadoop-common-project/hadoop-common test 
-Dtest=TestFSOutputSummer` passes.
   
   Note: the JIRA's original reproduction steps reference an HDFS test 
(`TestDecommissionWithStriped`), but since the buffer overflow bug lives 
entirely in `hadoop-common`'s `FSOutputSummer` class, this PR adds a focused 
unit test in `hadoop-common` instead, avoiding an unnecessary cross-module HDFS 
test dependency.
   
   ### AI Tooling
   Contains content generated by Claude (Anthropic). Used to help investigate 
the root cause, draft the fix, and write/verify the accompanying unit test.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to