Line offset list monotonicity assertion is only checked on the resize slow path
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
Piste de recherche
Lisez include/prism/internal/line_offset_list.h et src/line_offset_list.c, en vous concentrant sur pm_line_offset_list_append et pm_line_offset_list_append_slow. Vérifiez le comportement de l’assertion pour les ajouts rapides comme pour les ajouts lents, puis exécutez les tests pertinents de la liste des offsets de ligne. Le travail est terminé lorsque des offsets dupliqués ou dans le désordre déclenchent l’assertion dans les builds de débogage sur les deux chemins.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Prism records the byte offset of the start of each source line in parser->line_offsets (pm_line_offset_list_t), which must remain strictly monotonically increasing so that binary search (pm_line_offset_list_line and pm_line_offset_list_line_column) can map byte offsets to 1-based line and column numbers.
Currently, the monotonicity assertion
PRISM_ASSERT(list->size == 0 || cursor > list->offsets[list->size - 1]);
is placed inside pm_line_offset_list_append_slow (src/line_offset_list.c) rather than the inline fast path pm_line_offset_list_append (include/prism/internal/line_offset_list.h). As a result, any duplicate or out-of-order line offset appended while list->size < list->capacity silently succeeds even in debug builds with PRISM_ASSERT enabled.
Reproduction
In #4346, we see on 774aebc1f
$ ruby -Ilib -rprism -e 'p Prism.parse("<<\"\#{0}\n\#{<<0}\\C-\n\#{0}\n\n").source.offsets'
# => [0, 8, 18, 23, 24, 23, 24]
For my mac os prism version, I see an abort:
ruby -rprism -e 'p Prism.parse("<<\"\#{0}\n\#{<<0}\\C-\n\#{0}\n\n").source.offsets'
# => [0, 8, 18, 23, 24, 23, 24]
Assertion failed: (list->size == 0 || newline_offset > list->offsets[list->size - 1]), function pm_newline_list_append, file pm_newline_list.c, line 51.
-e:1: [BUG] Aborted at 0x000000018d7c1650
ruby 4.0.1 (2026-01-13 revision e04267a14b) +PRISM [arm64-darwin25]
-- Crash Report log information --------------------------------------------
See Crash Report log file in one of the following locations:
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
for more details.
Don't forget to include the above Crash Report log file in bug reports.
- Langage dominant
- C
- Étoiles
- 1k
- Forks
- 202
- Merge moyen
- 6 h 18 min
- PR mergées (30 j)
- 77
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ruby/prism
-
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
ruby/prism#4346 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 30/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de ruby/prism
Issues similaires
-
good first issue help wanted program
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
hffgzktbcc-blip/ounce-core#297 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
mt7621 编译报错:expected 'struct sockaddr *' but argument is of type 'struct sockaddr_unsized *'Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
coolsnowwolf/lede#14283 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
OpenVisualCloud/SVT-JPEG-XS#130 ·
Les mainteneurs répondent en général sous 1 jour
-
MinGW fails to compile simulatorOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
rusefi/rusefi#10602 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour