Skip to content

入力文字列に^M(CR)が混在していると変換に失敗する問題を修正 (Issue #152)#153

Open
kiyoka wants to merge 1 commit into
mainfrom
issue-152-escape-carriage-return
Open

入力文字列に^M(CR)が混在していると変換に失敗する問題を修正 (Issue #152)#153
kiyoka wants to merge 1 commit into
mainfrom
issue-152-escape-carriage-return

Conversation

@kiyoka

@kiyoka kiyoka commented Jun 6, 2026

Copy link
Copy Markdown
Owner

概要

Issue #152 で報告された、入力文字列に ^M (CR / U+000D) が混在していると変換が !!TIMEOUT ERROR!! で失敗する問題を修正します。

Closes #152

原因

sumibi-escape-for-json (lisp/sumibi.el) が、JSON へエスケープする際に復帰文字 (CR / ^M / U+000D) を処理していませんでした

  • バックスラッシュ・ダブルクォート・改行 (\n)・タブ (\t) はエスケープしていた
  • しかし \r はそのまま素通りし、生の制御文字が JSON 文字列リテラル中に残る
  • JSON 仕様では U+0000〜U+001F の制御文字はエスケープ必須なので、不正な JSON になりリクエストが失敗 → !!TIMEOUT ERROR!!

修正内容

  • sumibi-escape-for-json\r\\r のエスケープ処理を追加
  • CR/CRLF のエスケープ、既存動作(改行・タブ・クォート・バックスラッシュ)の回帰、生成 JSON の妥当性を検証する ERT テストを新規追加 (test/sumibi-escape-json-test.el)
  • Makefile の test ターゲットに新テストを組み込み

検証結果

  • M-x check-parens で括弧整合 OK
  • ✅ 新規テスト 8 件すべてパス
  • make test 全テストパス(既存への影響なし)
  • ✅ CR を含む入力が有効な JSON になり、内容が round-trip することを確認

🤖 Generated with Claude Code

sumibi-escape-for-json が復帰文字 (CR / ^M / U+000D) をエスケープして
いなかったため、生の制御文字が JSON 文字列リテラル中に残り、リクエストが
不正な JSON になって変換に失敗していた (!!TIMEOUT ERROR!!)。

\r を \\r にエスケープする処理を追加し、有効な JSON を生成するようにした。
CR/CRLF のエスケープ、既存動作の回帰、JSON 妥当性を検証する ERT テストを
追加し、Makefile の test ターゲットに組み込んだ。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

入力文字列に^Mが混在していると、変換に失敗する

1 participant