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

[R][Parquet] ParquetReaderProperties does not expose page_checksum_verification, so a corrupt page CRC reads silently

Abierto Apto para principiantes
#53,138 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
72/100
Tipo de issue
Nueva funcionalidad
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
cpp, r
Área
data

Línea de trabajo

Empieza en r/R/parquet.R alrededor de la clase ParquetReaderProperties, donde los accesores existentes de thrift_string_size_limit muestran el patrón a seguir; luego revisa las funciones cpp11 correspondientes en r/src/parquet.cpp y las exportaciones en NAMESPACE. Confirma que el getter y el setter de C++ en cpp/src/parquet/properties.h son accesibles desde el shim. Se considera terminado cuando la clase de R expone get y set de page_checksum_verification y leer datapage_v1-corrupt-checksum.parquet con esa opción activada produce un error. Antes de abrir un pull request, verifica primero si los mantenedores quieren este cambio.

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

Descripción

Component: R
Describe the bug

The R bindings do not expose page_checksum_verification, so an R user has no way to turn on page-CRC verification when reading Parquet. Arrow's own deliberately-corrupt test files are read without error.

C++ has the option and Python exposes it; only R does not.

C++ cpp/src/parquet/properties.h:148-150 — page_checksum_verification() / set_page_checksum_verification(bool check_crc), defaulting to false at line 166
Python python/pyarrow/parquet/core.py:269,325,346 — a documented page_checksum_verification=False parameter
R r/R/parquet.R:656-682 — ParquetReaderProperties declares and implements only thrift_string_size_limit and thrift_container_size_limit
Reproduction

Using the files parquet-testing ships expressly so readers can be shown to reject a bad CRC — datapage_v1-corrupt-checksum.parquet ("uncompressed INT32 columns in v1 data pages with a mismatching CRC") and rle-dict-uncompressed-corrupt-checksum.parquet:

library(arrow)
packageVersion("arrow")          # 25.0.0, libarrow 25.0.0

nrow(read_parquet("datapage_v1-corrupt-checksum.parquet"))            # 5120  -- no error
nrow(read_parquet("rle-dict-uncompressed-corrupt-checksum.parquet"))  # 1000  -- no error

ls(ParquetReaderProperties$create())
#>  [1] "class_title" "clone" "initialize" "pointer" "print" "set_pointer"
#>  [7] "set_thrift_container_size_limit" "set_thrift_string_size_limit"
#>  [9] "thrift_container_size_limit" "thrift_string_size_limit"
# no page_checksum_verification

Measured on linux/aarch64, R 4.5.3, arrow 25.0.0 / libarrow 25.0.0, with parquet-testing at e74785d85a4e (the cpp/submodules/parquet-testing commit at apache-arrow-25.0.0).

Why it matters

Reading without CRC verification is a reasonable default — it matches C++ and Python. The gap is that R offers no way to opt in, so an R pipeline cannot detect page-level corruption even when it wants to. Silent corruption is the failure mode page CRCs exist to prevent, and the files above exist to prove a reader catches it.

It also means Arrow's own conformance corpus cannot be used from R for its intended purpose: those two files are supposed to fail, and from R they are indistinguishable from the matching-CRC files beside them (datapage_v1-uncompressed-checksum.parquet, plain-dict-uncompressed-checksum.parquet).

Component(s)

R, Parquet

Sketch of a fix

Not offering a PR, but the shape looks small — two accessors alongside the existing thrift ones in r/R/parquet.R:

page_checksum_verification = function() {
  parquet___arrow___ReaderProperties__get_page_checksum_verification(self)
},
set_page_checksum_verification = function(check_crc) {
  parquet___arrow___ReaderProperties__set_page_checksum_verification(self, check_crc)
},

plus the two cpp11 shims in r/src/parquet.cpp forwarding to the existing C++ getter/setter, and a line each in the @description block and NAMESPACE. Happy to be told if there is a reason it was left out deliberately — #36997 touched the same class for a different reason and did not add it.

Lenguaje dominante
C++
Estrellas
17.2k
Forks
4.4k
Merge medio
3 d 9 h
PR fusionados (30 d)
70

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

Todos los issues de apache/arrow

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.