Created
April 5, 2013 19:21
-
-
Save wilfrem/5321876 to your computer and use it in GitHub Desktop.
monoのregular exceptionのバグ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
monoのRegexバグを踏んだのでメモっておく | |
現在(mono 3.0.7)で治ってない。 | |
バグ報告スレ | |
https://bugzilla.xamarin.com/show_bug.cgi?id=2663 | |
自分が踏んだバグが | |
IronRubyをUbuntuのmonoに入れたらgemが動かないというバグでした | |
問題の箇所が | |
rubygems/requirement.rbのparseでArgumentErrorを吐いて落ちるというバグ | |
何が問題かというと正規表現にバグがあって | |
>|>=を条件によってはmatchできなくなるバグ | |
まだ治ってないので | |
とりあえずのパッチとしては | |
http://www.ruby-forum.com/topic/1864531 | |
ここにあるようにrequirement.rbを | |
OPS = { #:nodoc: | |
"=" => lambda { |v, r| v == r }, | |
"!=" => lambda { |v, r| v != r }, | |
- ">" => lambda { |v, r| v > r }, | |
- "<" => lambda { |v, r| v < r }, | |
">=" => lambda { |v, r| v >= r }, | |
"<=" => lambda { |v, r| v <= r }, | |
+ ">" => lambda { |v, r| v > r }, | |
+ "<" => lambda { |v, r| v < r }, | |
"~>" => lambda { |v, r| v = v.release; v >= r && v < r.bump } | |
} | |
という感じに直せばとりあえずは動きます。 | |
バグのtestコード | |
using System; | |
using System.Text.RegularExpressions; | |
public static class Program | |
{ | |
public static void Main(string[] args) | |
{ | |
Console.WriteLine(Regex.IsMatch("AB",@"^(A|AB)?$")); | |
Console.WriteLine(Regex.IsMatch("AB",@"^(AB|A)?$")); | |
Console.WriteLine(Regex.IsMatch("A",@"^(A|AB)?$")); | |
Console.WriteLine(Regex.IsMatch("A",@"^(AB|A)?$")); | |
} | |
} | |
これの一つ目だけFalseになる。。。 | |
このバグを踏まないようにするには | |
|を使うときは長い方を先にする方が良さげ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
と思ったけど、OptionParserとかでエラー出まくるのか。。。