SlideShare a Scribd company logo
1 of 60
 




パッチを書いてみよう




                             masa

             2011-07-23 Nseg 第 17 回勉強会
自己紹介
 はてな:http://d.hatena.ne.jp/masa141421356
         (id:masa141421356)

 Twitter : @masa141421356




 ほぼプログラマ。仕様の打ち合わせから実装まで全部やります。
Firefox のパッチって
どう書くの?
第1部:パッチを書くのに必要なもの


・Firefox のバイナリをビルドできる開発環境

・bugzill.mozilla.org のアカウント
・   Firefox で使用している技術(C++, JavaScript,

    HTML, CSS, XUL, HTTP, etc.)の知識
・
    「ある程度」の英語力
・作業時間(これ重要)
・
    自分が気になったバグを追いかける根気

1. 開発環境

    MDN 開発者ガイド
    https://developer.mozilla.org/ja/Developer_Guid
 e
殆どのツールは OS 付属か
無料ダウンロードで揃う。

SDK 揃えるのが面倒?
ま、ビンゴ揃えるつもりで
 (By Benjamin Smedberg)

http://benjamin.smedbergs.us/blog/2008-04-16/microsoft-header-bingo/
2. bugzilla.mozilla.org アカウント

  メールアドレスがあれば OK

  ログインしている人にはメールアドレスが見
  えるので、英語 SPAM が嫌いな人は迷惑メー
  ル対策の出来るアカウントでやるのがお勧め
3. 技術の知識

Firefox のソースはコアの部分は C++


UI は XML/HTML + JavaScript + CSS など。


UI 系だと画像を作るだけでよいバグもある
(bug 414243 誰かやりませんか?)
そのほかには

 Web に 関 わ る 各 種 の 標 準 (HTTP, HTML,

 XML, ECMAScript, CSS 等)


 OS の標準的なアプリケーションのガイドラ

 インや API の知識
あと、Mozilla のコーディングスタイルガイ
ドライン。大体周辺のコードのスタイルに合
わせれば OK。


技術を全部知っていなくてもパッチは書け
る。
4.
     「ある程度」の英語力


      bugzilla.mozilla.org のディスカッションは
      基本的に英語
技術的な話だけのディスカッションの
場合はそれほど難しい言葉は出てこない
(専門用語は別)。


簡単に直せるバグは説明や議論に使われ
る単語や言い回しも簡単なことが多い。
仕様や設計思想に関わるディスカッション
  ↓
難しい話や慎重な議論が必要なものは、
必然的に使われる言葉が難しくなる
結論が明らか(直したほうが良いことが明
らかなバグ)
   ↓
大体使われている単語も簡単
Typo は?

 あっても大丈夫。でも、スペルチェッカーは有
 効にしておくことは推奨。それだけでかなりミ
 スが減る。


 誤解を生むような typo はすぐに訂正を入れれ
 ばよい(コメントを取り消せないことはみん
 な知っているので)。
今の自分の目標


 1つも typo をせずにバグ登録か
 ら修正完了までの処理を完了する
 こと
5. 作業時間

 自分の場合は夜と休日の空き時間。

 家庭も大事。休みの日全部をつぎ込むと理解が
 得られなくなる。

 実質的には土日で合計半日が限界。
でも、何もしないのと少しでも手を動かすのは
全然違う。
6. 気になったバグを追いかける根気

興味を持った分野のバグか自分の見つけたバ
グが追いやすい。
興味のある分野・主力分野を突付く。

・Windows の High Contrast で UI 部品の色が周囲と同じ
 になって見えないバグ


・URL に変な文字を突っ込むとブラウザが誤動作する


・実質的に Web アプリと見なせるもののセキュリティ
第 2 部:実際に直してみよう


 実例(bug 660612)を参考に
1.直すべき場所の見当をつける

・ 機能から想像される変数名でソース検索
  MXR で検索できる( http://mxr.mozilla.org/ )


  例:フォントの高さがウィンドウサイズより高い場合にページ
      スクロールの量が極端に少ない(bug 383267)
    → fontHeight でソース検索
・ 問題となる箇所に固定文字列があればそれでソースを検索する。
・   UI 系は DOM Inspector で見当をつけて、userChrome.css で試

    してみる。
・ 国際化された文字列なら、リソースを検索してリソース名からあ
    たりをつける
・   自分が過去にパッチを書いたことがある部分は想像がつく
・ ディスカッション中にヒントが見つかることも
・ bug660612 の場合


  bug660612 : Utf8ToOneUcs4Char passes invalid UTF-8 octets '%ED%A0%80', so
              decodeURIComponent('%ED%A0%80') doesn't throw




 知ったきっかけは @Constellation さんのつぶやき
後日バグの詳細がはてなへ


http://d.hatena.ne.jp/Constellation/20110530/1306759498
問題のコード http://hg.mozilla.org/mozilla-central/file/e0ca895fde7e/js/src/jsstr.cpp#l5977
何故特定できたか?


 →以前パッチを書いた場所
http://hg.mozilla.org/mozilla-central/annotate/e0ca895fde7e/js/src/jsstr.cpp#l5977
2.
     直してビルド

  手元のソースを修正してビルドする。
  
   元の改行コードと文字コードを維持できる
     エディタが必要(LF 改行対応必須)
3.意図どおりに直ったかテスト

 どうやってテストする?
   ↓
 バグに添付されたテストケースで試す。
   ↓
 良質なテストケースが無いと検証不能
   ↓
 良いテストケースを書ける人は高評価
4.リグレッションのチェック

他の機能へ影響が大きそうな場合は慎重に。
 
自動テストがある機能はテストを走らせて見る
5.可能なら自動テストも書く
・自動テストが書いてあると話が早い
 ・リグレッションがあった時に Tinderbox が
  炎上してすぐにわかる
    ↓
  テストを書いて通るのを確認!!
6.パッチをアップロード

・自動テストの配置するべき場所に自身が無
い
・なぜか hg diff で追加ファイルのパッチが出
 ない
    ↓
 jsstr.cpp は修正パッチとして登録
テストは単独ファイルで添付
テストは長いので省略
7.レビュー

レビュワーは誰にするか


・ガイドラインは MDN に書いてある

・ CVS Blame や Hg Blame で自分が直した
 場所にその前に手を入れたバグを探して、パ
ッチのレビュワーを探す
 今回は、前にパッチを書いたときと同じ
 Jeff Walden さんにした
8.指摘事項のある r+とコメント
9.指摘対応その1
指摘事項
・自分なら2つの if を1つにまとめるね
・テストは      decodeURIComponent("%ED%A0%80") が
URIError を投げることのチェックだけにして、余計なもの
を削って、js/src/tests/ecma_5/Global に置いてください。
 相変わらず hg diff で追加ファイルがパッチに
 出ないので、仕方なくテストは手作業でパッチ
 に変換。

 パッチは変換ミスがあったので後で差異アッ
 プロード
10.指摘対応その2と 3




 だいたいそのままなので日本語訳省略
ここでようやく

 hg add ファイル名

をしないとパッチに新規ファイルが乗らないことに気づく
(MDN に書いて欲しい)
書き直した部分
ここで 1 つミスをした。
指摘内容と比べてみよう
( )の数がコメント内容と違ってます…orz



この指摘と修正を経てようやくコメントなし
r+がつきました。
11.チェックインへ

コミッタじゃない人はチェックインできない
ので誰かにチェックインしてもらう
このコメントと一緒に
  checkin? をセット




この間で checkin+ になった
12.フォロー
・セキュリティホールなど、現行バージョンの
 修正を検討するべきバグだった場合
     ↓
 フラグやコメントで現行バージョンへの投入
 が必要かどうか相談する

同じパッチが使えない場合は、各ブランチ用に
パッチを書く。
・Seamonkey も気にする。

 ブラウザ固有機能のバグなどでは、Firefox と

  ほぼ同じコードが Seamonkey にも存在す
  ることも多いので、そちらのケアもする。
   
・Rhino も気にする
JavaScript エンジンの場合は Rhino もチェ
 ックしておく




  Question?

More Related Content

What's hot

mod_pywebsocketのインストールをやってみたよ
mod_pywebsocketのインストールをやってみたよmod_pywebsocketのインストールをやってみたよ
mod_pywebsocketのインストールをやってみたよ
akasexxx
 
映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010
Hiroh Satoh
 
WordPressプラグイン考察
WordPressプラグイン考察WordPressプラグイン考察
WordPressプラグイン考察
Takami Kazuya
 
HTML5 NIGHT 08. Web × パフォーマンス技術
HTML5 NIGHT 08. Web × パフォーマンス技術HTML5 NIGHT 08. Web × パフォーマンス技術
HTML5 NIGHT 08. Web × パフォーマンス技術
Yoichiro Takehora
 

What's hot (17)

もしアジャver2.0
もしアジャver2.0もしアジャver2.0
もしアジャver2.0
 
mod_pywebsocketのインストールをやってみたよ
mod_pywebsocketのインストールをやってみたよmod_pywebsocketのインストールをやってみたよ
mod_pywebsocketのインストールをやってみたよ
 
映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010
 
Ratchetでweb socketを使ってみたよ.d0131.pub
Ratchetでweb socketを使ってみたよ.d0131.pubRatchetでweb socketを使ってみたよ.d0131.pub
Ratchetでweb socketを使ってみたよ.d0131.pub
 
WordPressプラグイン考察
WordPressプラグイン考察WordPressプラグイン考察
WordPressプラグイン考察
 
MongoDBCSharp
MongoDBCSharpMongoDBCSharp
MongoDBCSharp
 
月刊ライトニングトーク 12月号
月刊ライトニングトーク 12月号月刊ライトニングトーク 12月号
月刊ライトニングトーク 12月号
 
WordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみたWordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみた
 
HTML5 NIGHT 08. Web × パフォーマンス技術
HTML5 NIGHT 08. Web × パフォーマンス技術HTML5 NIGHT 08. Web × パフォーマンス技術
HTML5 NIGHT 08. Web × パフォーマンス技術
 
Markdown で行こう!
Markdown で行こう!Markdown で行こう!
Markdown で行こう!
 
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
 
How to spread reST and Sphinx
How to spread reST and SphinxHow to spread reST and Sphinx
How to spread reST and Sphinx
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01
 
Chrome For HTML5NIGHT
Chrome For HTML5NIGHTChrome For HTML5NIGHT
Chrome For HTML5NIGHT
 
開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovy開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovy
 
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
 
PHP With Windows binary
PHP With Windows binaryPHP With Windows binary
PHP With Windows binary
 

Viewers also liked (8)

MIMEデリミタ注入攻撃
MIMEデリミタ注入攻撃MIMEデリミタ注入攻撃
MIMEデリミタ注入攻撃
 
今さら聞けないXSS
今さら聞けないXSS今さら聞けないXSS
今さら聞けないXSS
 
SORACOMでのJava/AWS活用
SORACOMでのJava/AWS活用SORACOMでのJava/AWS活用
SORACOMでのJava/AWS活用
 
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
XSS再入門
XSS再入門XSS再入門
XSS再入門
 
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼうCMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
 
安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016
 

Similar to パッチを書いてみよう(第17回Nseg勉強会LT)

早稲田大学授業 - モバイルプログラミング
早稲田大学授業 - モバイルプログラミング早稲田大学授業 - モバイルプログラミング
早稲田大学授業 - モバイルプログラミング
Ippei Arita
 
Web標準技術の今とこれからを考える(村岡正和 ・ 秋葉秀樹)
Web標準技術の今とこれからを考える(村岡正和 ・ 秋葉秀樹)Web標準技術の今とこれからを考える(村岡正和 ・ 秋葉秀樹)
Web標準技術の今とこれからを考える(村岡正和 ・ 秋葉秀樹)
Hideki Akiba
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summary
Yukio NAGAO
 
ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前
Yusuke Kamo
 

Similar to パッチを書いてみよう(第17回Nseg勉強会LT) (20)

案件で使えるプラグイン特集
案件で使えるプラグイン特集案件で使えるプラグイン特集
案件で使えるプラグイン特集
 
自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx
 
Trat_sprint3
Trat_sprint3Trat_sprint3
Trat_sprint3
 
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
 
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
 
早稲田大学授業 - モバイルプログラミング
早稲田大学授業 - モバイルプログラミング早稲田大学授業 - モバイルプログラミング
早稲田大学授業 - モバイルプログラミング
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefox
 
Web標準技術の今とこれからを考える(村岡正和 ・ 秋葉秀樹)
Web標準技術の今とこれからを考える(村岡正和 ・ 秋葉秀樹)Web標準技術の今とこれからを考える(村岡正和 ・ 秋葉秀樹)
Web標準技術の今とこれからを考える(村岡正和 ・ 秋葉秀樹)
 
Cod2012 Room T-1
Cod2012 Room T-1Cod2012 Room T-1
Cod2012 Room T-1
 
モノとモノとをつなぐ 3つの「れんけい」
モノとモノとをつなぐ 3つの「れんけい」モノとモノとをつなぐ 3つの「れんけい」
モノとモノとをつなぐ 3つの「れんけい」
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみよう
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summary
 
日頃のプログラミングについて
日頃のプログラミングについて日頃のプログラミングについて
日頃のプログラミングについて
 
Word bench 制作効率を上げるツール
Word bench 制作効率を上げるツールWord bench 制作効率を上げるツール
Word bench 制作効率を上げるツール
 
ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前
 
これからのOpenShiftの話をしよう
これからのOpenShiftの話をしようこれからのOpenShiftの話をしよう
これからのOpenShiftの話をしよう
 
12 総合演習Word Pressの利用
12 総合演習Word Pressの利用12 総合演習Word Pressの利用
12 総合演習Word Pressの利用
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
ワイヤーフレームを高速にXDらしく作る
ワイヤーフレームを高速にXDらしく作るワイヤーフレームを高速にXDらしく作る
ワイヤーフレームを高速にXDらしく作る
 

Recently uploaded

Recently uploaded (12)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

パッチを書いてみよう(第17回Nseg勉強会LT)