[BUG] SocketAddr performs misaligned sockaddr_in access through reinterpret_cast
Los mantenedores suelen responder en 1 día
@JonSnow1807 ya está trabajando en esto.
Desde el 22/10/2026.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 68/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- cpp
- Área
- networking
Línea de trabajo
Comienza en ext/include/opentelemetry/ext/http/server/socket_tools.h, en SocketTools::SocketAddr(u_long addr, int port), y luego sigue su llamador addListeningPort. Compara la sobrecarga de enteros con el enfoque basado en memcpy de #4292. La tarea estará terminada cuando el constructor evite el acceso desalineado a sockaddr_in y tenga un comportamiento definido para los puertos fuera de 0..65535, con UBSan y las comprobaciones de comportamiento relevantes superadas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
SocketTools::SocketAddr(u_long addr, int port) in ext/include/opentelemetry/ext/http/server/socket_tools.h has two defects:
1. Alignment / type-access UB. It binds a sockaddr_in & to the sockaddr m_data storage through a reinterpret_cast:
sockaddr_in &inet4 = reinterpret_cast<sockaddr_in &>(m_data);
sockaddr and sockaddr_in do not share alignment on all platforms (on Linux alignof(sockaddr) == 2 but alignof(sockaddr_in) == 4), so accessing the storage through a sockaddr_in glvalue is an alignment / strict-aliasing issue that UBSan reports.
2. Silent port truncation. port is an int cast to uint16_t with no range check:
inet4.sin_port = htons(static_cast<uint16_t>(port));
so out-of-range values wrap silently:
-1→6553565536→099999→34463
Impact
This constructor is on the live server path: it has an addListeningPort caller (unlike the SocketAddr(char const *) overload, which has no in-repo caller). The string-parsing overload was made safe in #4292 (it memcpys a local sockaddr_in in and out of the storage and parses a strict decimal port); this integer constructor still uses the old reinterpret_cast access and the unchecked port cast.
Suggested fix
Mirror #4292's approach: build a local sockaddr_in, memcpy it into m_data, and validate or clamp the port range (or document the caller's contract that the port is already in 0..65535).
Context
Split out of the ext/http correctness audit (#4287). #4292 deliberately scoped this out to keep that PR limited to the string parser.
- Lenguaje dominante
- C++
- Estrellas
- 1.4k
- Forks
- 660
- Merge medio
- 1 d 12 h
- PR fusionados (30 d)
- 47
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de open-telemetry/opentelemetry-cpp
-
Baggage::ToHeader/FromHeader use form-style `+` for space, which other W3C Baggage implementations read as a literal plusPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug triage/accepted
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
open-telemetry/opentelemetry-cpp#4745 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[CMake] Strengthen pkg-config installation tests to detect missing metadata and dependenciesAbiertoneeds-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
open-telemetry/opentelemetry-cpp#4697 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
TracerContext construction might result in a terminateQuizá libre de nuevo @akshat-lakhera la tomó hace 26 días y no hay ningún pull request abierto. Abiertotriage/accepted
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
open-telemetry/opentelemetry-cpp#4684 · 2 comentarios · 2 reacciones ·
Los mantenedores suelen responder en 1 día
-
[CI] Add Ubuntu 26.04 runners to the CI workflowQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertotriage/accepted
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
open-telemetry/opentelemetry-cpp#4596 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
[BUG] Resource::Create() throws bad_variant_access if process.executable.name isn't a stringPosiblemente ocupada @ryux1 la tomó hace 60 días. Abiertobug help wanted triage/accepted
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
open-telemetry/opentelemetry-cpp#4535 · 1 comentario · 2 reacciones ·
Los mantenedores suelen responder en 1 día
Todos los issues de open-telemetry/opentelemetry-cpp
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Sunrisepeak/mcpp-language-server#80 ·
Los mantenedores suelen responder en 1 día
-
#2754 make deepseek api not workAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
xiaoyifang/goldendict-ng#3148 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
triton-inference-server/server#9069 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 4 días