[ BUG ] Backslash sequences in heading text are interpreted by echo -e

Đang mở
#203 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
76/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
bash, shell
Lĩnh vực
cli

Hướng nghiên cứu

Start at gh_toc_grab around line 470, where the generated TOC passes through echo -e, and trace how the href escapes are produced by the awk script. Reproduce with the supplied headings containing \n and \c, then check that the generated TOC preserves those backslashes and retains later entries. Verify both normal output and --insert --no-backup --hide-footer.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug

Describe the bug

A backslash sequence in the heading text, such as \n or \c, is interpreted in the TOC entry. \n splits the entry into two lines, and \c cuts the TOC: the rest of that entry and all the entries after it are lost.

gh_toc_grab prints the TOC with echo -e (line 470 on master at a28f86d):

echo $echoargs "$(awk ... "$awkscript")"

-e is there for the link: awk turns every % of the href into \x, and echo -e decodes the \xNN sequences, see #6 and #10. But the whole line goes through it, so the heading text does too. The OS/390 branch sets echoargs="", so it is not affected.

To Reproduce

cat > test.md <<'MD'
# Top

## The `\n` escape

## Use \c to stop

## Last
MD
./gh-md-toc test.md

Output:

Table of Contents
=================

* [Top](#top)
   * [The 
 escape](#the-n-escape)
   * [Use 

<!-- Created by https://github.com/ekalinin/github-markdown-toc -->

GitHub renders these headings as The <code>\n</code> escape, Use \c to stop and Last, so the backslashes come into gh_toc_grab as they are.

--insert --no-backup --hide-footer writes the same broken TOC into the file, with exit code 0:

<!--ts-->
* [Top](#top)
   * [The 
 escape](#the-n-escape)
   * [Use 
<!--te-->

Expected behavior

* [Top](#top)
   * [The \n escape](#the-n-escape)
   * [Use \c to stop](#use-c-to-stop)
   * [Last](#last)

Environment (please complete the following information):

  • OS: macOS (Darwin 24.6.0), GNU bash 5.3.15
  • Version: 0.11.0 (master at a28f86d)

Additional context

Found while working on #153: headings with inline code, such as `\n`, are more likely to have a backslash. It is the same with and without --keep-code from #202.

Ngôn ngữ chính
Shell
Star
3.3k
Fork
2.7k
Merge trung bình
1 giờ 56 phút
Pull request đã merge (30 ngày)
21

Chuẩn bị môi trường

  • Có Dockerfile hoặc tệp Docker Compose
  • Không có mẫu pull request
  • Không có hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của ekalinin/github-markdown-toc

Tất cả issue của ekalinin/github-markdown-toc

Issue tương tự

Thêm issue về Shell/Bash

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.