Scheme-less stream URLs throw NullPointerException instead of URISyntaxException

Cerrado Apto para principiantes
#2,218 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

Ya se ha fusionado un pull request relacionado.

  • #2219 de @blihio — fusionado

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
82/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
android, java, kotlin
Área
networking

Línea de trabajo

Empieza en la clase UrlParser del módulo common, en parse, donde la comprobación de soporte de protocolos solo se ejecuta cuando uri.scheme no es null. El constructor asigna después scheme = uri.scheme, lo que lanza la NPE. Ejecuta UrlParser.parse("//localhost/live/test", arrayOf("rtmp")) para reproducirlo. Está terminado cuando una entrada sin esquema lanza URISyntaxException y las pruebas existentes del módulo common siguen pasando.

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

Descripción

Describe the bug

UrlParser.parse allows a scheme-less URI with a host and path to pass validation, then throws NullPointerException when assigning the null scheme to a non-null Kotlin property.

The streaming clients catch URISyntaxException around URL parsing, so this input bypasses their malformed-endpoint handling.

To reproduce

Call either of the following:

UrlParser.parse("//localhost/live/test", arrayOf("rtmp"))
UrlParser.parse("//127.0.0.1:1935/live/test", arrayOf("rtmp"))

Both produce:

java.lang.NullPointerException: getScheme(...) must not be null

The current condition only checks whether the protocol is supported when uri.scheme != null. A missing scheme skips this check, and the constructor later fails at scheme = uri.scheme.

Expected behavior

Reject a missing scheme with URISyntaxException, as with an unsupported scheme, so callers can use the existing malformed-URL handling.

Environment
  • Source version: 2.8.1
  • Commit: 82a9cb4ee4babdc792d2ccee8b893f2b36207d40
  • Module: common
  • Class: UrlParser
  • Reproduced on the JVM and in Android local unit tests using JDK 17 and Gradle 9.7.1.
  • A device or media server is not required to reproduce this parser failure.
Additional context

Two regression tests reproduce the issue: a scheme-less hostname URL and a scheme-less IPv4 URL with an explicit port. Both fail with NPE before the fix and pass afterward.

With only the fix and its tests applied, all 100 common and 25 encoder local unit tests pass.

A full client connection or device-level crash was not tested.

Lenguaje dominante
Kotlin
Estrellas
3k
Forks
946
Merge medio
3 d 17 h
PR fusionados (30 d)
9

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

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 pedroSG94/RootEncoder

Todos los issues de pedroSG94/RootEncoder

Issues similares

Más issues de Kotlin

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.