REXML DoS 脆弱性対策

Posted by okkez Wed, 27 Aug 2008 23:25:00 GMT

REXML DoS 脆弱性対策をしようとして typo があったため落ちてましたorz

落ちてる間に見ようとした人達がもしいたら、ご迷惑をお掛けしました。

Posted in | no comments |

Hash#default_proc をあとでセットする方法

Posted by okkez Fri, 22 Aug 2008 03:48:00 GMT

Hash#default_proc= がなかったのであるハッシュにあとで default_proc をセットする方法を考えてみました。

以下のようにするとうまく行きます。

hash = {}                             # default_proc が無い。
hash.default_proc            # => nil
other_hash  = Hash.new{|h, k| h[k] = [] }.merge(hash)
other_hash.default_proc # => #<Proc:0xb7c87474@-:3>

Posted in , | no comments |

Hiki on Rack 2

Posted by okkez Fri, 22 Aug 2008 03:04:00 GMT

続き。

とりあえず、ページを編集できるところまで確認。 作業手順をまとめると以下のような感じ。

  • hiki.ru を用意する。
  • hiki.rb を用意する。
    • Hiki::App クラスを作って call メソッドを定義する
  • @cgi を使っている部分を全て @request に変更する
  • params['hoge'][0] を全て params['hoge'] に変更する
  • ENV を使用している部分を @request.env に変更する
  • クッキーを使用している部分を修正する
    • セッションキーだけなので簡単
  • print している部分を Rack::Response 的なものを返すように変更
    • [ヘッダー,ステータス,ボディ] な配列で OK
    • 面倒なのでヘッダーとボディだけ返してステータスは常に 200 にしといた
  • Rack::Lint によるとヘッダーに Status を入れてはいけないらしいのでそれを入れてる部分を削除
  • その他こまごまとした修正が必要。
    • CGI に依存している部分とか、ロードパスとか。

まとめ

頑張ればできる。

いや、でも Hiki のソースも意外とひどいというのがわかった。統一感がないというかカオス一歩手前というか。

Posted in | no comments |

Hiki on Rack

Posted by okkez Thu, 21 Aug 2008 15:34:00 GMT

Hiki - Hiki -Front Page-Rack: a Ruby Webserver Interface に載せる実験中。

概ねうまく行きそうな感じだけど、セッションまわりに苦戦中。あと、たぶんプラグインを全部修正しないといけないのが辛いかもしれない。

ちゃんと出来たら公開する予定。

Posted in | no comments |

第29回 Ruby/Rails勉強会@関西

Posted by okkez Tue, 19 Aug 2008 05:31:00 GMT

行ってきました。

ちょっと睡眠不足気味だったので各セッションの記憶はあまりなかったりします。

なので今回は行ったという記録のみ残しておきます。

Posted in | no comments |

RSpec で transaction のテスト

Posted by okkez Sun, 03 Aug 2008 15:36:00 GMT

Yuya さんのヒントをもとにしてこんな風にしてみました。

sqlite3? は spec_helper に定義した。ヘルパーメソッド。 SQLite3 だとトランザクションの入れ子が出来なかった(例外が発生する)のでこうしてます。

一応 shouldnotreceive で特定の処理から先には進んでないことは確認しているし、 エラーメッセージも確認しているのでこれでテストとしては良さそう。

あとは、実装コードの最初の方で呼んでる処理をモック化すればいいと思う。

これをモック化すると、通しのテストはどうすればいいのだろう、というのが今の疑問。

describe BatchController do
  describe "POST create" do
    describe "by login user" do
      describe "when posted data was invalid (subject)" do
        before do
          Question.should_not_receive(:create!)
          Choice.should_not_receive(:create!)
          unless sqlite3?
            ActiveRecord::Base.connection.should_receive(:rollback_db_transaction)
          end
        end
        before do
          login_as :quentin
          post :create, :batch => { :body => INVALID_DATA_WITHOUT_TITLE }
        end
        it "should have error message" do
          flash[:error].should == 'invalid data.'
        end
        it "should redirect to 'subject/index'" do
          response.should redirect_to(subjects_path)
        end
      end
    end
  end
end

Posted in , | no comments |

アンケートのデータ修正しました

Posted by okkez Fri, 01 Aug 2008 03:46:00 GMT

http://q.okkez.net/ の第 28 回 Ruby/Rails 勉強会のアンケートで選択肢が英語になっていたデータを修正しました。

簡単なスクリプトを書いて script/console にコピペして実行した。 ちょっと複雑な修正なら SQL 書くより早いしわかりやすいね。

一部のデータがおかしくなってしまったのは SQL 書いて修正しましたけど。。。

多分、原因は私が使ってる Iceweasel に日本語言語パックをインストールしていなかったためだと思います。 次に同じようなミスがあった場合はすぐに修正できそうです。 r

Posted in , | no comments |

Rack 使ってみた

Posted by okkez Wed, 30 Jul 2008 14:37:00 GMT

諸事情で web アプリを Rails を不使用で書く必要があったので cgi.rb の代わりに Rack を使ってみた。

主に上記を参考にして書いた。

ソースコードは整理して色々名前とか変えたら公開できるかもしれない。

感想

意外と短い行数で書けてびっくりした。 Rails の劣化版くらいなら一日くらいででっちあげられそうな感じ。

Posted in , | no comments |

第 28 回 Ruby/Rails 勉強会

Posted by okkez Sun, 27 Jul 2008 07:23:00 GMT

日本Rubyの会 公式Wiki - 第28回 Ruby/Rails勉強会@関西

行ってきました。

エラトステネスの嵐—Rubyの集合演算を活用する by こなみさん

いろいろやってたらあまり聞けなかった。残念。

git - 分散バージョン管理システム by 舘野祐一さん a.k. id:secondlife

かわいいよ git かわいいよ。

今、作ってる某課題の管理はこれでやってみようかなぁ。

git-svn の使い方とか調べたい。

Ruby 初級者向けレッスン 第 22 回 by okkez さん

今回は irb について。

演習の後半は irb 関係ない感じでいきました。

演習の解答例は wiki にアップしたのでそちらを参照してください。

とりあえず、うちの ~/.irbrc です。refe2 のところはあまりうまく動かない。 まともに実装しようとすると bitclust を require してごにょごにょする必要があったりなかったりする。

#!/usr/bin/ruby

# ri を使えるようにする
# 例.
# irb> String.ri
# irb> ri String  # same as above
# irb> String.ri 'reverse'
# irb> ri 'File.new'
def ri(*args)
  puts `ri #{args.join(' ')}`
end

class Module
  def ri(meth=nil)
    if meth
      if instance_methods(false).include? meth.to_s
        puts `ri #{self}##{meth}`
      else
        super
      end
    else
      puts `ri #{self}`
    end
  end
end
# refe2 も使えるように
module Kernel
  def r(*args)
    puts `refe2 #{args.join(' ')}`
  end
  private :r
end

class Module
  def r(meth = nil)
    if meth
      if instance_methods(false).include? meth.to_s
        puts `refe2 #{self}##{meth}`
      else
        super
      end
    else
      puts `refe2 #{self}`
    end
  end
end

IRB.conf[:EVAL_HISTORY] = 1000

# タブ補完を有効にする
require 'irb/completion'

# simple prompt
IRB.conf[:PROMPT_MODE] = :SIMPLE

# ヒストリーを有効にする
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 1000
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"

# サブ irb の設定
IRB.conf[:IRB_RC] = lambda{|_|
  IRB.conf[:IRB_RC] = lambda{|conf| conf.prompt_mode = :DEFAULT }
}

require 'pp'
require 'yaml'

Posted in | no comments |

RubyKaigi2008 extra

Posted by okkez Sun, 29 Jun 2008 13:23:00 GMT

http://i.loveruby.net/d/20080629.html

青木さんが大変な中、発表してくれたのにそんな裏側があったなんて。 外野の戯れ言には負けてられないので、頑張る。

来年はもっとよいリファレンスマニュアルにしてやるぞ。

Posted in | no comments |

Older posts: 1 2 3 4