Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Byte-array elements leak in `FromSchemaByteArray()`

Abierto Apto para principiantes
#1,205 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

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

Línea de trabajo

Comienza en dataset/src/main/cpp/jni_util.cc, en FromSchemaByteArray(), e inspecciona el flujo de GetByteArrayElements, ReadSchema y ReleaseByteArrayElements. Verifica que la liberación también se produzca cuando el análisis falle y, después, ejecuta la ruta de un esquema no válido o incompatible mediante createDataset(); se considera terminado cuando los elementos de matriz JNI adquiridos se liberan tanto en las rutas de éxito como de error.

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

Descripción

Type: bug
Describe the bug, including details regarding any error messages, version, and platform.

I found a possible JNI array leak in FromSchemaByteArray() when the serialized schema cannot be parsed.

File: dataset/src/main/cpp/jni_util.cc

Function: FromSchemaByteArray

Relevant code:

jbyte* schemaBytes_data =
    env->GetByteArrayElements(schemaBytes, nullptr);
auto serialized_schema = std::make_shared<arrow::Buffer>(
    reinterpret_cast<uint8_t*>(schemaBytes_data),
    schemaBytes_len);
arrow::io::BufferReader buf_reader(serialized_schema);

ARROW_ASSIGN_OR_RAISE(
    std::shared_ptr<arrow::Schema> schema,
    arrow::ipc::ReadSchema(&buf_reader, &in_memo))

env->ReleaseByteArrayElements(
    schemaBytes, schemaBytes_data, JNI_ABORT);
return schema;

GetByteArrayElements() returns a pointer that must be paired with
ReleaseByteArrayElements().

ARROW_ASSIGN_OR_RAISE returns immediately when ReadSchema() returns an
error. On that path, the release below the macro is skipped, so the acquired
array elements remain unreleased:

GetByteArrayElements succeeds
  -> ReadSchema returns an error
  -> ARROW_ASSIGN_OR_RAISE returns
  -> ReleaseByteArrayElements is skipped

The function is used by the public native createDataset() method:

schema = JniGetOrThrow(
    FromSchemaByteArray(env, schema_bytes));

Malformed, corrupted, or incompatible serialized schema bytes can therefore
reach this path. Repeated failed calls can retain copied array buffers or keep
Java arrays pinned, depending on the JVM implementation.

Suggested fix: release the elements before propagating the parse result, for
example:

auto schema_result =
    arrow::ipc::ReadSchema(&buf_reader, &in_memo);

env->ReleaseByteArrayElements(
    schemaBytes, schemaBytes_data, JNI_ABORT);

return schema_result;

An RAII guard for schemaBytes_data would also ensure release if additional
early returns are introduced later.

Lenguaje dominante
Java
Estrellas
95
Forks
154
Merge medio
2 d 10 h
PR fusionados (30 d)
11

Guía de contribución

Abrir la guía de contribución

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/arrow-java

Todos los issues de apache/arrow-java

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.