-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Texのファイルで落ちます。 #539
Comments
sakura.ini を削除した初期状態で開いて、a.tex として保存してみましたが普通に扱えました。2.3.2.0 です。何かのソフトが干渉しているというのがよくあるパターンですが……。 |
不具合っぽいので気にしてます。 ちょっと切り取りですが
動作停止したファイルをzipに詰めて、 |
あら、単純じゃないのね。 |
確かに自宅PCだと落ちないなぁ。。。 |
もっかい再現するPCで作ったファイル見てみます(&再現したらUPします) |
同じPCのsakura.exeのみを別フォルダにコピーして実行するも再現せず。 で、 |
保存時の文字コードと改行コードはどうなってますか? |
SJISのCRLFになってますね。 |
アウトライン解析のバグなら、開いただけでは落ちないはずです。 アウトライン解析は無駄に高度なポインタ演算してて、c++解析でもcrashが発生してました。そん時は、自動インデントが発生する状況で間接的にアウトライン解析が起動されてたのが原因だったっぽいです。sf.net時代の話ね。 何かが原因でアウトライン解析が走った結果落ちてるのなら、アウトライン解析の問題としてまとめて対策できるかも知らんです。 |
検体.zip で「動作を停止しました」。不思議なのはメニューから「アウトライン解析... F11」を実行するとなんでもないのに、F11 で解析すると停止することです。 (追記) デバッガではどちらもアクセス違反になるので、呼び出し経路の違いからくるスタックの厚みで耐えていただけとかそんな? (追記) 話はそれますが BugReport/224 (BugReport/189 と同じ)は文字の間隔を2以上にすることで再現できます、再現を試みていたのなら。 |
スタックの厚みは関係ないっぽく見えます。 void CDocOutline::MakeTopicList_tex(CFuncInfoArr* pcFuncInfoArr) この処理が何をするコードで、 ↓ナナメ読みした処理内容 crashの直接原因は、「文字列データ」の上限255文字を超えるデータを作ろうとしたこと。 上限255文字を超えるデータを作りにいってるのがダメなのか(設計上ありえない?)、 |
のが直接の原因ではないでしょうか。 自分はアウトラインも TeX もまともな使用経験がないため、どういう結果を正解として修正すればいいのかわかりません。 |
という一連の行があるのに、各変数の定義がそれぞれ
なのは問題かもしれません。潜在的な別の問題ではありますが。 (追記) 問題ありでした。以下のようなテキストをアウトライン解析すると tmpstr[] があふれます。リリースバイナリは落ちませんがデバッガが「Run-Time Check Failure #2 - Stack around the variable 'tmpstr' was corrupted.」と報告します。
|
secstr が2桁までの連番しか想定していないのも問題でした。以下のような内容の100行を越えるテキストを TeX としてアウトライン解析すると、バージョン 2.3.2.0 が「動作を停止」します。
5桁10桁の連番に対応できる必要はないかもしれませんが、安全にやり過ごせなければいけないでしょう。 |
残念ながら私もTeXは全然触ったことがなく今回初めて検体作りました^^; |
一応事象(開いただけで落ちる)が発生しているフォルダごと別PCへコピーして実行したら落ちないので、環境依存の様です。 |
アウトライン解析をエディタウィンドウ内にドッキングしていると、エディタを再起動してもその状態が維持されているようです。これならファイルを sakura.exe アイコンにドロップして開いただけで落ちました(運良く落ちないこともあります。未初期化変数に何が入っているかによるのでしょう)。 |
@ds14050 さん、ビンゴです! |
もともとの TeX アウトライン書き直した TeX アウトライン書き直した TeX アウトライン(内容を変えて2枚目)違いは以下の通りです。
しかしこれが現在の利用者に納得してもらえるのかはわかりません。 ネットでサンプルを検索したところ part, paragraph, subparagraph という階層もあるようでした。たとえば section から始まる小さな階層で文章を書くとき、chapter にあたる部分の番号が常に 0. として表示されるのは煩わしいかもしれません。part に追加対応するとなると 0.0. になってしまいます。深い階層から始まってより大きな構造があとから現れるイレギュラーな文書では曖昧になってしまいますが、0. というプリフィックスを削って表示する手が現実的かもしれません。 悪のりしました。配列に "part", "paragraph", "subparagraph" を追加するだけで階層を追加できます。最初に \part が出現するまでは \chapter が最上階層であるかのように 0. プリフィックスを省略しています。 もともとエディタが落ちていたようなイレギュラーな文書構造に対して、よりリーズナブルなアウトラインを与える一方、整然とした文書構造に対しては従来通りなので、ちょっとばかし仕様が変わるとしてもなんら問題はない気がしてきました。 |
先のコメントで「整然とした文書構造に対しては従来通りなので、(中略)なんら問題はない気がしてきました。」と書きましたが、落ちるケースに注目するあまり正常ケースの検証はその時点ではまだでした。 次のようなマクロで、リリースバイナリが落ちないような、整然とした構造の TeX 文書を作成してみました。 generateTeXOutlineTopic.js.txt マクロの出力サンプルを 2.0.3.1 (※2.3.2.0 と変わらないはずです)でアウトライン解析した結果が次のテキストです。 section タグは必ずそのすぐ上の階層である chapter を親として持つように配置していますが、まれにアウトラインツリーの最上層に出現していることが見てとれます。 原因の根本はおそらく次の一行です。ループをまたぐ状態の伝搬が、連番を付する場合にのみ行われます。 sakura/sakura_core/types/CType_Tex.cpp Line 175 in e7a76c8
これが再現しないこと以外は、「整然とした文書構造に対しては従来通り」は概ね間違いないと思います。書き直した TeX アウトラインでは同じ文書が次のようにアウトライン化されます。 ふとした疑問ですが、TeX アウトラインは高度な処理をしているわけではありません。ルールファイルで間に合う処理であったならがっかりです。 |
* Fix: トピックの階層が連続しない場合に、トピックが抜けたり、未初期化変数にアクセスして落ちないように。 * Fix: バッファ長より長いトピックタイトルで落ちないように。 * Fix: 3桁以上になる連番で落ちないように。 * Chg: 連番なしのトピックがあるときでも階層が正しくなるように。
* Fix: トピックの階層が連続しない場合に、トピックが抜けたり、未初期化変数にアクセスして落ちないように。 * Fix: バッファ長より長いトピックタイトルで落ちないように。 * Fix: 3桁以上になる連番で落ちないように。 * Chg: 連番なしのトピックがあるときでも階層が正しくなるように。
* Fix: トピックの階層が連続しない場合に、トピックが抜けたり、未初期化変数にアクセスして落ちないように。 * Fix: バッファ長より長いトピックタイトルで落ちないように。 * Fix: 3桁以上になる連番で落ちないように。 * Chg: 連番なしのトピックがあるときでも階層が正しくなるように。
* Fix: トピックの階層が連続しない場合に、トピックが抜けたり、未初期化変数にアクセスして落ちないように。 * Fix: バッファ長より長いトピックタイトルで落ちないように。 * Fix: 3桁以上になる連番で落ちないように。 * Chg: 連番なしのトピックがあるときでも階層が正しくなるように。
手持ちのv1では落ちない。v2.3.2.0では、上記のテキストを貼り付けて拡張子texで保存すると、動作を停止します。
The text was updated successfully, but these errors were encountered: