JNI: NewStringUTF (modified UTF-8) mangles astral-plane chars — emoji alphabet text is corrupted in transit
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
- 52/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Lĩnh vực
- internationalization, mobile
Hướng nghiên cứu
Start in jni_bridge.cpp: run a search for NewStringUTF and GetStringUTFChars, and check the output callback near line 189 first. The fix is to build engine-to-Kotlin strings from UTF-16 with NewString and to handle the Kotlin-to-engine direction the same way. Done when an emoji from the engine arrives intact in Kotlin, and a round-trip test with an astral-plane character passes.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Follow-up from the #71 review loop (review M3, pre-existing).
jni_bridge.cpp uses env->NewStringUTF(...) for engine→Kotlin strings (e.g. output callback text at jni_bridge.cpp:189 and friends). JNI's NewStringUTF expects modified UTF-8 (CESU-8): 4-byte UTF-8 sequences — every astral-plane codepoint, i.e. most emoji — are invalid and get mangled. Since c003214 the app ships an Emoji alphabet, so astral chars are a live output path: the engine emits correct UTF-8, the Kotlin side receives garbage.
(The UTF-16-level coalescing contract added in #71 is correct at the Kotlin layer — ImeOutputCoalescerTest pins it — but the runtime path through JNI corrupts the string before Kotlin sees it.)
Fix pattern: decode UTF-8 → UTF-16 manually (or via String::fromUTF8 helpers) and construct with env->NewString(utf16, len). Audit every NewStringUTF in jni_bridge.cpp; also check the reverse direction (GetStringUTFChars — same modified-UTF-8 caveat) for Kotlin→engine strings (training import, seedBuffer).
Split out of #71 to keep that PR scoped to the batching fix.
- Ngôn ngữ chính
- Kotlin
- Star
- 2
- Fork
- 0
- Merge trung bình
- 4 giờ 45 phút
- Pull request đã merge (30 ngày)
- 7
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 dasher-project/Dasher-Android
-
enhancement
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 72/100
-
enhancement
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 68/100
-
UX: IME needs editing tools (backspace, cursor movement) — 'I go back and forth with SwiftKey'Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 68/100
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 42/100
-
bug
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
dasher-project/Dasher-Android#34 · 1 bình luận ·
Tất cả issue của dasher-project/Dasher-Android
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
react/react-native#59693 ·
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 65/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
Itch.io full searchĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Droid-Deck/DroidDeck#1852 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
pengchujin/aerial-tv#989 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày