[Bug] BitsArray rejects partial-byte clones but accepts bit lengths beyond backing capacity

Abierto
#11,458 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@hickey-ai ya está trabajando en esto.

Desde el 20/10/2026.

  • #11459 de @hickey-ai — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
25/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
java
Área
backend

Línea de trabajo

The report identifies the BitsArray byte-array constructor and gives reproductions for cloning a 9-bit array and accepting a bit length beyond backing capacity. Start by locating BitsArray and its constructor, then inspect the existing tests for create(int) and byte-array construction. Done means valid partial-byte arrays clone with their logical length and independent storage, while lengths beyond capacity are rejected; linked pull request #11459 is already open.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Before Creating the Bug Report
  • I found a bug, not just asking a question, which should be created in GitHub Discussions.

  • I have searched the GitHub Issues and GitHub Discussions of this repository and believe that this is not a duplicate.

  • I have confirmed that this bug belongs to the current repository, not other repositories of RocketMQ.

Runtime platform environment

Windows 11, local utility reproducer and native Maven filter-module tests. No broker deployment or message-loss claim.

RocketMQ version

develop, revision 5.5.1, commit 57c2dc04f78cc7e73e6b8c9436ee0fff0d0f46c3. The current develop source still has the same constructor.

JDK Version

OpenJDK 1.8.0_302 (GraalVM CE 21.2.0); also reproduced with Java 21 using Java 8-targeted utility/test classes. Native Maven validation used Java 8 and Maven 3.6.3.

Describe the Bug

The byte-array constructor rejects bitLength < bytes.length * 8 instead of rejecting a logical length larger than the backing capacity. As a result, any positive non-byte-aligned array created by create(int) fails to clone, while an impossible byte-array capacity is accepted. The null/empty/non-positive checks and defensive copy are otherwise present.

Steps to Reproduce
BitsArray.create(9).clone();
// IllegalArgumentException: BitLength is less than bytes.length() * 8

BitsArray.create(new byte[] {1, 0}, 9);
// Same exception despite sufficient capacity.

BitsArray.create(new byte[] {1}, 9).getBit(8);
// Constructor accepts it; subsequent access is out of bounds.
What Did You Expect to See?

Cloning a valid 9-bit array preserves its logical length, contents and independent backing storage. A byte-array constructor accepts a logical bit length within storage capacity and rejects lengths beyond that capacity.

What Did You See Instead?

Valid partial-byte reconstruction and clone throw IllegalArgumentException. A one-byte backing array can be declared as nine bits, allowing a later ArrayIndexOutOfBoundsException.

Additional Context

Duplicate checks: #10506 (merged) and #8664 (closed) fix position bounds, not this constructor capacity comparison. No matching open BitsArray PR or discussion was found.

A minimal correction and regression tests are prepared. The updated utility class has 28 tests: 3 failed before the fix and all 28 passed after on Java 8/21. Native Java 8 filter reactor: 110 tests passed, 0 failures/errors/skips, with Checkstyle and SpotBugs passing. BloomFilter normally rounds to whole-byte lengths, so no live broker failure or message-loss claim is made.

AI assistance: OpenAI Codex was used for investigation, implementation and tests.

Lenguaje dominante
Java
Estrellas
22.7k
Forks
12k
Merge medio
3 d 18 h
PR fusionados (30 d)
17

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/rocketmq

Todos los issues de apache/rocketmq

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.