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

JavaDocImpl.comment() throws on a javadoc containing a literal {n}

Abierto Apto para principiantes
#166 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

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

Línea de trabajo

Empieza con JavaDocImpl.comment() en maddi-cst-impl/src/main/java/io/codelaser/maddi/cst/impl/element/JavaDocImpl.java y sigue cómo se almacenan y expanden los marcadores de posición de las etiquetas inline. Reproduce el caso con el ejemplo {0}={1} que contiene {@code key}; se considera resuelto cuando las secuencias literales permanecen sin cambios, los marcadores de posición del parser se expanden correctamente y un índice fuera de rango no lanza una excepción.

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

Descripción

JavaDocImpl.comment() expands {n} in the stored text as a placeholder for inline tag n. Literal text of that form in the javadoc itself gets the same treatment. When n is not a valid tag index, comment() throws.

Where: maddi-cst-impl/src/main/java/io/codelaser/maddi/cst/impl/element/JavaDocImpl.java, comment():

Pattern p = Pattern.compile("\\{(\\d+)}");
Matcher m = p.matcher(super.comment());
while (m.find()) {
    int tagIndex = Integer.parseInt(m.group(1));
    Tag tag = tags.get(tagIndex);   // IndexOutOfBoundsException
    ...

Seen as:

java.lang.IndexOutOfBoundsException: Index: 1 Size: 1
    at java.base/java.util.ImmutableCollections$List12.get(ImmutableCollections.java:611)
    at io.codelaser.maddi.cst.impl.element.JavaDocImpl.comment(JavaDocImpl.java:189)

This happened while parsing an open-source project (nacos) and calling comment() on each type's comments.

Minimal shape: a javadoc that contains a MessageFormat-style pattern and at least one inline tag, for example:

/**
 * Formats {@code key} as "{0}={1}".
 */

The stored text holds {0} for {@code key}, so tag 0 exists. The literal {0} and {1} are then taken as placeholders too. {1} is out of range and throws. {0} is silently replaced by the wrong tag.

Expected: comment() returns the javadoc text as written. Literal {n} sequences are kept, and only the parser's own placeholders are expanded.

Possible fixes:

  • Escape literal { (or {n}) when the placeholders are created, and unescape in comment().
  • Use a placeholder form that cannot occur in source text, such as one with a private-use character.

Either way, out-of-range indices should not throw.

Workaround for callers: commentWithPlaceholders() returns the stored text without expansion. That is enough for checks that only look for words in the comment.

Lenguaje dominante
Java
Estrellas
1
Forks
1
Merge medio
1 h 34 min
PR fusionados (30 d)
7

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 CodeLaser/maddi

Todos los issues de CodeLaser/maddi

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.