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

out of bound access when building TLegend

Cerrado
#23,767 0 comentarios 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@vepadulano ya está trabajando en esto.

Desde el 20/10/2026.

  • #23768 de @vepadulano — fusionado

Evaluación

Este issue todavía no se ha evaluado.

Descripción

bug in:Graphics
Check duplicate issues.
  • Checked for duplicates
Description

A simple plotting example of a histogram produces

/usr/include/c++/16/bits/stl_bvector.h:1158: constexpr std::vector<bool, _Alloc>::reference std::vector<bool, _Alloc>::operator[](size_type) [with _Alloc = std::allocator<bool>; reference = std::vector<bool>::reference; size_type = long unsigned int]: Assertion '__n < this->size()' failed.

In a debug build with GCC 16. See reproducer below.

The issue stems from https://github.com/root-project/root/blob/94606761150e817bf1c91c76fc1083deecfdcf33/graf2d/gpad/src/TPad.cxx#L3171 which allows accessing the one-after-last element of the vector.

Reproducer
#include <gtest/gtest.h>
#include <TCanvas.h>
#include <TH1D.h>

TEST(TH2D, DrawWithBuildLegend)
{

   TH1D h1{"h1", "h1", 10, 0, 1};
   auto nFills{10};
   for (auto i = 0; i < nFills; i++) {
      h1.Fill(0.45);
   }

   // Set a range on the Y axis lower cannot contain the maximum value: this triggered a bug in TPad::FillCollideGridTH1
   // which would access the vector to find empty spaces for the legend out of bounds.
   h1.GetYaxis()->SetRangeUser(0, 8);

   TCanvas c;
   h1.Draw();
   // Need to check that BuildLegend can work also when the Y axis does not contain the maximum value
   c.BuildLegend();
}

int main(int argc, char **argv)
{
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
}
ROOT version

Any

Installation method

From source

Operating system

Linux

Additional context

No response

Lenguaje dominante
C++
Estrellas
3.3k
Forks
1.6k
Merge medio
2 d 17 h
PR fusionados (30 d)
188

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 root-project/root

Todos los issues de root-project/root

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.