Crash with the ordinal indicators `º`/`ª` in `mi`
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ó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 88/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ệ
- rust
- Lĩnh vực
- accessibility
Hướng nghiên cứu
Bắt đầu với split_apart_pseudo_scripts trong src/canonicalize.rs và các ví dụ MathML được báo cáo là gây lỗi. Issue có đề xuất một cơ chế bảo vệ cho các định danh chỉ có một ký tự và một bài kiểm thử hồi quy tên là pseudo_script_single_char_mi; chạy cargo test để kiểm tra bản sửa lỗi. Công việc hoàn tất khi các ví dụ không còn gây lỗi và bài kiểm thử hồi quy thành công.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
In Spanish, ordinals are written with a period and the ordinal indicator: 1.º, 2.ª (U+00BA, U+00AA; not the degree sign). When the indicator comes as an mi on its own, MathCAT crashes, in any language:
<math><mn>1</mn><mo>.</mo><mi>º</mi></math>
<math><mn>1.</mn><mi>º</mi></math>
<math><mn>2</mn><mo>.</mo><mi>ª</mi></math>
All give index out of bounds at src/canonicalize.rs:404.
Cause and proposed patch: split_apart_pseudo_scripts pairs each char with the next one, so a single char gives no pairs and replace_children is called with an empty list. Tested: cargo test passes; adds the test pseudo_script_single_char_mi.
diff --git a/src/canonicalize.rs b/src/canonicalize.rs
index 1e3936f8..00a5165b 100644
--- a/src/canonicalize.rs
+++ b/src/canonicalize.rs
@@ -1520,7 +1520,8 @@ impl CanonicalizeContext {
let text = as_text(mi);
// debug!("split_apart_pseudo_scripts: start text=\"{text}\"");
- if !text.chars().any(is_pseudo_script_char) || IS_DEGREES_C_OR_F.is_match(as_str!(text)) {
+ if !text.chars().any(is_pseudo_script_char) || IS_DEGREES_C_OR_F.is_match(as_str!(text)) ||
+ text.chars().nth(1).is_none() { // a single char (e.g., "º") has nothing to split
return None;
}
@@ -7085,6 +7086,14 @@ mod canonicalize_tests {
are_strs_canonically_equal_result(test_str, target_str, &[])
}
+ #[test]
+ fn pseudo_script_single_char_mi() -> Result<()> {
+ // used to crash (index out of bounds in replace_children)
+ let test_str = "<math><mn>1</mn><mi>º</mi></math>";
+ let target_str = "<math><mrow data-changed='added'><mn>1</mn><mo data-changed='added'>⁢</mo><mi>º</mi></mrow></math>";
+ are_strs_canonically_equal_result(test_str, target_str, &[])
+ }
+
#[test]
fn prescript_only() -> Result<()> {
let test_str = "<math><msub><mtext/><mn>92</mn></msub><mi>U</mi></math>";
- Ngôn ngữ chính
- Rust
- Star
- 130
- Fork
- 96
- Merge trung bình
- 1 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 84
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của daisy/MathCAT
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
daisy/MathCAT#946 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
discussion
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Review French navigation fileĐang mởdiscussion translation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
daisy/MathCAT#675 · 4 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
feature request for vector from O to ACó thể làm lại được @moritz-gross đã nhận 52 ngày trước và không có pull request nào đang mở. Đang mởenhancement good first issue rules rust
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
daisy/MathCAT#621 · 1 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của daisy/MathCAT
Issue tương tự
-
Panic on live viewport resize when unstyled elements exist in display: none subtreeCó thể đã có người làm @GoCoder7 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
DioxusLabs/blitz#1488 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
🏷️ good first issue enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
Maintainer thường phản hồi trong vòng 1 ngày
-
S-Needs triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 77/100
vectordotdev/vrl#2042 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày