バグ #637
完了つぶやき中のURLのt.coが展開されないツイートがある
説明
https://twitter.com/ph_toei/status/429203799404593152
のツイートを mikutter 0.2.2.1476 で表示すると
- & が "& amp;" のままで表示される
- URLの t.co が展開されない
- URLの下線が引かれない(リンク自体はクリックできる)
という状態になってしまいます。
URL、&、ハッシュタグ等々のエンティティが含まれる、かつ
twitter公式の画像を含むツイートで同様の現象が起こることが
過去にもあったのですが、必ず起こるわけでもないようで、
いまいち法則がわかっていません。
関連するチケット
Izumi Tsutsui さんがほぼ11年前に更新
https://twitter.com/cgst/status/431336867309436928
でも再現しました。
ハッシュタグ + &記号 + twitter公式の添付画像 が条件?
Satoshi Okuno さんがほぼ11年前に更新
寝たら明日が来ちゃう。日曜出勤なんてヤダー!な気分だったので調べてみました。
entity.rbの_generate_valueにてmessage.to_showに対してURLの正規表現をマッチさせてる処理があり、それが誤動作してる様です。
message.to_show.each_matches(rule[:regexp]){ |match, byte, pos|
なぜか展開後のURLと展開前のt.coのURLの両方がマッチしてる。
その2つのURLのrangeが一部かぶってて、cairo_markup_generator.rbのアンダーラインを引く処理で不正なhtmlが生成されている。
結果、Pangoがパース出来ず、各種装飾に失敗してる様です。
試しにmessage.to_showをmessage[:message]に変えたらアンダーラインは引かれる様に成りましたが、http+pic.twitter.com/〜+みたいにゴミが出ます。
一筋縄ではいかんですね。
Izumi Tsutsui さんが10年以上前に更新
ハッシュタグなし、記号なしのこのツイート
https://twitter.com/ebijun/status/447493014550634496
でも再現するようです。
URLのエンティティと他のエンティティが同じ値になっていると変になる、とかでしょうか……
Izumi Tsutsui さんが10年以上前に更新
ハッシュタグもメンションもないこのツイートでも起きるようです。
https://twitter.com/Swati_THN/status/457867734420705280
何か記号がエスケープできてないんでしょうか。
0.2.2 だけかもしれませんが……
toshi_a 初音 さんが10年以上前に更新
- ステータス を 新規 から レビュー待ち に変更
- 担当者 を Izumi Tsutsui にセット
エスケープの都合上文字数がずれることがあって、「<」と「>」についてはその処理がありましたが、「&」はそれが処理されていなかったという問題がありました。
報告いただいた4件のうち、最初の2件に関しては正しく表示できるようになりました。
- https://twitter.com/ph_toei/status/429203799404593152
- https://twitter.com/cgst/status/431336867309436928
しかし、以下に関しては依然表示できません。
- https://twitter.com/ebijun/status/447493014550634496
- https://twitter.com/Swati_THN/status/457867734420705280
これは別の問題である可能性が高いので、 #655 に分けました。
解決したぶんについては、現在developのみに適用したため、そちらで確認してください。このあたりは0.2.2以降にいくつか書き換えている部分があってマージが面倒なので、バックポートしないかもしれません。
toshi_a 初音 さんが10年以上前に更新
- 関連している バグ #655: URLにエスケープされるような文字が含まれていないツイートで、リンク処理が一切行われない を追加
Izumi Tsutsui さんが10年以上前に更新
- ステータス を レビュー待ち から 解決 に変更
例によって
NetBSD/i386 6.1.4 と pkgsrc-2014Q1 の
mikutter 0.2.2.1537
ruby 2.0.0p451
ruby-gnome2 2.2.0
という とか環境 ですが
core/entity.rb と core/mui/cairo_markup_generator.rb について
0.2.2.1537 に対して 6b0ad1c6 での差分を当てたところ、conflictもなく、
最初の2件のツイートは正しく t.co が展開されて
ハッシュタグも正しく表示されました。
https://twitter.com/tsutsuii/status/459948311642771456/photo/1
https://twitter.com/tsutsuii/status/459948736257331202/photo/1
ありがとうございます。