1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020 |
- From c31e7c1e8b2895ef33204938487597e2b3acaaf7 Mon Sep 17 00:00:00 2001
- From: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Fri, 2 Mar 2012 02:45:35 +0000
- Subject: [PATCH 01/19] merge revision(s) 25230,34866:
- * marshal.c (struct {dump,load}_arg): manage with dfree, instead
- of using local variable which may be moved by context switch.
- [ruby-dev:39425]
- * marshal.c (mark_dump_arg): mark destination string. patch by
- Vit Ondruch. [Bug #4339]
- * marshal.c (clear_dump_arg, clear_load_arg): clean up also data
- tables as same as symbols tables.
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@34867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 14 +++++
- marshal.c | 145 +++++++++++++++++++++++-----------------------
- test/ruby/test_marshal.rb | 28 +++++++++
- version.h | 10 ++--
- 4 files changed, 120 insertions(+), 77 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index a09237e..352a30f 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,17 @@
- +Fri Mar 2 11:44:33 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- +
- + * marshal.c (mark_dump_arg): mark destination string. patch by
- + Vit Ondruch. [Bug #4339]
- +
- + * marshal.c (clear_dump_arg, clear_load_arg): clean up also data
- + tables as same as symbols tables.
- +
- +Fri Mar 2 11:44:33 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- +
- + * marshal.c (struct {dump,load}_arg): manage with dfree, instead
- + of using local variable which may be moved by context switch.
- + [ruby-dev:39425]
- +
- Wed Feb 8 14:06:59 2012 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c: Add SSL constants and allow to unset SSL
- diff --git a/marshal.c b/marshal.c
- index 35e0d60..632f6ca 100644
- --- a/marshal.c
- +++ b/marshal.c
- @@ -85,12 +85,10 @@
- static ID s_getc, s_read, s_write, s_binmode;
-
- struct dump_arg {
- - VALUE obj;
- VALUE str, dest;
- st_table *symbols;
- st_table *data;
- int taint;
- - VALUE wrapper;
- };
-
- struct dump_call_arg {
- @@ -104,20 +102,31 @@ struct dump_call_arg {
- struct dump_arg *arg;
- ID sym;
- {
- - if (!DATA_PTR(arg->wrapper)) {
- + if (!arg->symbols) {
- rb_raise(rb_eRuntimeError, "Marshal.dump reentered at %s",
- rb_id2name(sym));
- }
- }
-
- +static void clear_dump_arg _((struct dump_arg *arg));
- +
- static void
- mark_dump_arg(ptr)
- void *ptr;
- {
- struct dump_arg *p = ptr;
- - if (!ptr)
- + if (!p->symbols)
- return;
- rb_mark_set(p->data);
- + rb_gc_mark(p->str);
- +}
- +
- +static void
- +free_dump_arg(ptr)
- + void *ptr;
- +{
- + clear_dump_arg(ptr);
- + xfree(ptr);
- }
-
- static VALUE
- @@ -699,32 +708,18 @@ class2path(klass)
- }
- }
-
- -static VALUE
- -dump(arg)
- - struct dump_call_arg *arg;
- -{
- - w_object(arg->obj, arg->arg, arg->limit);
- - if (arg->arg->dest) {
- - rb_io_write(arg->arg->dest, arg->arg->str);
- - rb_str_resize(arg->arg->str, 0);
- - }
- - return 0;
- -}
- -
- -static VALUE
- -dump_ensure(arg)
- +static void
- +clear_dump_arg(arg)
- struct dump_arg *arg;
- {
- - if (!DATA_PTR(arg->wrapper)) return 0;
- + if (!arg->symbols) return;
- st_free_table(arg->symbols);
- + arg->symbols = 0;
- st_free_table(arg->data);
- - DATA_PTR(arg->wrapper) = 0;
- - arg->wrapper = 0;
- + arg->data = 0;
- if (arg->taint) {
- OBJ_TAINT(arg->str);
- }
- -
- - return 0;
- }
-
- /*
- @@ -760,8 +755,8 @@ class2path(klass)
- {
- VALUE obj, port, a1, a2;
- int limit = -1;
- - struct dump_arg arg;
- - struct dump_call_arg c_arg;
- + struct dump_arg *arg;
- + VALUE wrapper;
-
- port = Qnil;
- rb_scan_args(argc, argv, "12", &obj, &a1, &a2);
- @@ -775,37 +770,40 @@ class2path(klass)
- else if (NIL_P(a1)) goto type_error;
- else port = a1;
- }
- - arg.dest = 0;
- - arg.symbols = st_init_numtable();
- - arg.data = st_init_numtable();
- - arg.taint = Qfalse;
- - arg.str = rb_str_buf_new(0);
- - RBASIC(arg.str)->klass = 0;
- - arg.wrapper = Data_Wrap_Struct(rb_cData, mark_dump_arg, 0, &arg);
- + wrapper = Data_Make_Struct(rb_cData, struct dump_arg, mark_dump_arg, free_dump_arg, arg);
- + arg->dest = 0;
- + arg->symbols = st_init_numtable();
- + arg->data = st_init_numtable();
- + arg->taint = Qfalse;
- + arg->str = rb_str_buf_new(0);
- + RBASIC(arg->str)->klass = 0;
- if (!NIL_P(port)) {
- if (!rb_respond_to(port, s_write)) {
- type_error:
- rb_raise(rb_eTypeError, "instance of IO needed");
- }
- - arg.dest = port;
- + arg->dest = port;
- if (rb_respond_to(port, s_binmode)) {
- rb_funcall2(port, s_binmode, 0, 0);
- - check_dump_arg(&arg, s_binmode);
- + check_dump_arg(arg, s_binmode);
- }
- }
- else {
- - port = arg.str;
- + port = arg->str;
- }
-
- - c_arg.obj = obj;
- - c_arg.arg = &arg;
- - c_arg.limit = limit;
- + w_byte(MARSHAL_MAJOR, arg);
- + w_byte(MARSHAL_MINOR, arg);
-
- - w_byte(MARSHAL_MAJOR, &arg);
- - w_byte(MARSHAL_MINOR, &arg);
- + w_object(obj, arg, limit);
- + if (arg->dest) {
- + rb_io_write(arg->dest, arg->str);
- + rb_str_resize(arg->str, 0);
- + }
-
- - rb_ensure(dump, (VALUE)&c_arg, dump_ensure, (VALUE)&arg);
- - RBASIC(arg.str)->klass = rb_cString;
- + RBASIC(arg->str)->klass = rb_cString;
- + clear_dump_arg(arg);
- + RB_GC_GUARD(wrapper);
-
- return port;
- }
- @@ -817,7 +815,6 @@ struct load_arg {
- st_table *data;
- VALUE proc;
- int taint;
- - VALUE wrapper;
- };
-
- static void
- @@ -825,22 +822,31 @@ struct load_arg {
- struct load_arg *arg;
- ID sym;
- {
- - if (!DATA_PTR(arg->wrapper)) {
- + if (!arg->symbols) {
- rb_raise(rb_eRuntimeError, "Marshal.load reentered at %s",
- rb_id2name(sym));
- }
- }
-
- +static void clear_load_arg _((struct load_arg *arg));
- +
- static void
- mark_load_arg(ptr)
- void *ptr;
- {
- struct load_arg *p = ptr;
- - if (!ptr)
- + if (!p->symbols)
- return;
- rb_mark_tbl(p->data);
- }
-
- +static void
- +free_load_arg(void *ptr)
- +{
- + clear_load_arg(ptr);
- + xfree(ptr);
- +}
- +
- static VALUE r_object _((struct load_arg *arg));
-
- static int
- @@ -1415,23 +1421,15 @@ struct load_arg {
- return r_object0(arg, arg->proc, 0, Qnil);
- }
-
- -static VALUE
- -load(arg)
- - struct load_arg *arg;
- -{
- - return r_object(arg);
- -}
- -
- -static VALUE
- -load_ensure(arg)
- +static void
- +clear_load_arg(arg)
- struct load_arg *arg;
- {
- - if (!DATA_PTR(arg->wrapper)) return 0;
- + if (!arg->symbols) return;
- st_free_table(arg->symbols);
- + arg->symbols = 0;
- st_free_table(arg->data);
- - DATA_PTR(arg->wrapper) = 0;
- - arg->wrapper = 0;
- - return 0;
- + arg->data = 0;
- }
-
- /*
- @@ -1452,8 +1450,8 @@ struct load_arg {
- {
- VALUE port, proc;
- int major, minor, taint = Qfalse;
- - VALUE v;
- - struct load_arg arg;
- + VALUE v, wrapper;
- + struct load_arg *arg;
-
- rb_scan_args(argc, argv, "11", &port, &proc);
- v = rb_check_string_type(port);
- @@ -1470,17 +1468,18 @@ struct load_arg {
- else {
- rb_raise(rb_eTypeError, "instance of IO needed");
- }
- - arg.src = port;
- - arg.offset = 0;
- - arg.symbols = st_init_numtable();
- - arg.data = st_init_numtable();
- - arg.proc = 0;
- - arg.wrapper = Data_Wrap_Struct(rb_cData, mark_load_arg, 0, &arg);
- - arg.taint = taint;
- -
- - major = r_byte(&arg);
- - minor = r_byte(&arg);
- + wrapper = Data_Make_Struct(rb_cData, struct load_arg, mark_load_arg, free_load_arg, arg);
- + arg->src = port;
- + arg->offset = 0;
- + arg->symbols = st_init_numtable();
- + arg->data = st_init_numtable();
- + arg->proc = 0;
- + arg->taint = taint;
- +
- + major = r_byte(arg);
- + minor = r_byte(arg);
- if (major != MARSHAL_MAJOR || minor > MARSHAL_MINOR) {
- + clear_load_arg(arg);
- rb_raise(rb_eTypeError, "incompatible marshal file format (can't be read)\n\
- \tformat version %d.%d required; %d.%d given",
- MARSHAL_MAJOR, MARSHAL_MINOR, major, minor);
- @@ -1491,8 +1490,10 @@ struct load_arg {
- MARSHAL_MAJOR, MARSHAL_MINOR, major, minor);
- }
-
- - if (!NIL_P(proc)) arg.proc = proc;
- - v = rb_ensure(load, (VALUE)&arg, load_ensure, (VALUE)&arg);
- + if (!NIL_P(proc)) arg->proc = proc;
- + v = r_object(arg);
- + clear_load_arg(arg);
- + RB_GC_GUARD(wrapper);
-
- return v;
- }
- diff --git a/test/ruby/test_marshal.rb b/test/ruby/test_marshal.rb
- index 5ae521e..d40c9da 100644
- --- a/test/ruby/test_marshal.rb
- +++ b/test/ruby/test_marshal.rb
- @@ -72,6 +72,34 @@ def test_too_long_string
- assert_equal("marshal data too short", e.message)
- end
-
- + class DumpTest
- + def marshal_dump
- + loop { Thread.pass }
- + end
- + end
- +
- + class LoadTest
- + def marshal_dump
- + nil
- + end
- + def marshal_load(obj)
- + loop { Thread.pass }
- + end
- + end
- +
- + def test_context_switch
- + o = DumpTest.new
- + Thread.new { Marshal.dump(o) }
- + GC.start
- + assert(true, '[ruby-dev:39425]')
- +
- + o = LoadTest.new
- + m = Marshal.dump(o)
- + Thread.new { Marshal.load(m) }
- + GC.start
- + assert(true, '[ruby-dev:39425]')
- + end
- +
- def test_taint
- x = Object.new
- x.taint
- diff --git a/version.h b/version.h
- index d6f16f5..1f2a143 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-02-08"
- +#define RUBY_RELEASE_DATE "2012-03-02"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120208
- -#define RUBY_PATCHLEVEL 358
- +#define RUBY_RELEASE_CODE 20120302
- +#define RUBY_PATCHLEVEL 359
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- -#define RUBY_RELEASE_MONTH 2
- -#define RUBY_RELEASE_DAY 8
- +#define RUBY_RELEASE_MONTH 3
- +#define RUBY_RELEASE_DAY 2
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From acc55c25c587fef5c7327c5912f3aa50a969ec34 Mon Sep 17 00:00:00 2001
- From: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Tue, 6 Mar 2012 03:06:11 +0000
- Subject: [PATCH 02/19] merge revision(s) 34919:
- * lib/yaml/rubytypes.rb (Exception.yaml_new): fix bug that causes
- YAML serialization problem for Exception.
- Exception#initialize doesn't use visible instance variable for
- the exception message, so call the method with the message.
- patched by Jingwen Owen Ou <jingweno AT gmail.com>.
- http://github.com/ruby/ruby/pull/41
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@34920 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 9 ++++++++
- lib/yaml/rubytypes.rb | 3 ++-
- test/yaml/test_exception.rb | 52 +++++++++++++++++++++++++++++++++++++++++++++
- version.h | 8 +++----
- 4 files changed, 67 insertions(+), 5 deletions(-)
- create mode 100644 test/yaml/test_exception.rb
- diff --git a/ChangeLog b/ChangeLog
- index 352a30f..886be66 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,12 @@
- +Tue Mar 6 12:05:42 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- +
- + * lib/yaml/rubytypes.rb (Exception.yaml_new): fix bug that causes
- + YAML serialization problem for Exception.
- + Exception#initialize doesn't use visible instance variable for
- + the exception message, so call the method with the message.
- + patched by Jingwen Owen Ou <jingweno AT gmail.com>.
- + http://github.com/ruby/ruby/pull/41
- +
- Fri Mar 2 11:44:33 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (mark_dump_arg): mark destination string. patch by
- diff --git a/lib/yaml/rubytypes.rb b/lib/yaml/rubytypes.rb
- index 35b7191..55d59fa 100644
- --- a/lib/yaml/rubytypes.rb
- +++ b/lib/yaml/rubytypes.rb
- @@ -117,7 +117,8 @@ def to_yaml( opts = {} )
- class Exception
- yaml_as "tag:ruby.yaml.org,2002:exception"
- def Exception.yaml_new( klass, tag, val )
- - o = YAML.object_maker( klass, { 'mesg' => val.delete( 'message' ) } )
- + o = klass.allocate
- + Exception.instance_method(:initialize).bind(o).call(val.delete('message'))
- val.each_pair do |k,v|
- o.instance_variable_set("@#{k}", v)
- end
- diff --git a/test/yaml/test_exception.rb b/test/yaml/test_exception.rb
- new file mode 100644
- index 0000000..1dc3044
- --- /dev/null
- +++ b/test/yaml/test_exception.rb
- @@ -0,0 +1,52 @@
- +require 'test/unit'
- +require 'yaml'
- +
- +module Syck
- + class TestException < Test::Unit::TestCase
- + class Wups < Exception
- + attr_reader :foo, :bar
- + def initialize *args
- + super
- + @foo = 1
- + @bar = 2
- + end
- +
- + def ==(other)
- + self.class == other.class and
- + self.message == other.message and
- + self.backtrace == other.backtrace
- + end
- + end
- +
- + def setup
- + @wups = Wups.new('test_message')
- + end
- +
- + def test_to_yaml
- + w = YAML.load(@wups.to_yaml)
- + assert_equal @wups, w
- + assert_equal 1, w.foo
- + assert_equal 2, w.bar
- + end
- +
- + def test_dump
- + w = YAML.load(@wups.to_yaml)
- + assert_equal @wups, w
- + assert_equal 1, w.foo
- + assert_equal 2, w.bar
- + end
- +
- + def test_to_yaml_properties
- + class << @wups
- + def to_yaml_properties
- + [:@foo]
- + end
- + end
- +
- + w = YAML.load(YAML.dump(@wups))
- + assert_equal @wups, w
- + assert_equal 1, w.foo
- + assert_nil w.bar
- + end
- + end
- +end
- diff --git a/version.h b/version.h
- index 1f2a143..13e41e8 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-03-02"
- +#define RUBY_RELEASE_DATE "2012-03-06"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120302
- -#define RUBY_PATCHLEVEL 359
- +#define RUBY_RELEASE_CODE 20120306
- +#define RUBY_PATCHLEVEL 360
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- #define RUBY_RELEASE_MONTH 3
- -#define RUBY_RELEASE_DAY 2
- +#define RUBY_RELEASE_DAY 6
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From 698d21a276f862da823c7a6536f9c15afe602e19 Mon Sep 17 00:00:00 2001
- From: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Sat, 14 Apr 2012 09:52:10 +0000
- Subject: [PATCH 03/19] merge revision(s) 35325:
- * bignum.c (rb_big2str0): prevent working clone from
- GC. [exerb-dev:0578]. patched by MURASE Masamitsu
- <masamitsu.murase AT gmail.com> at [exerb-dev:0580]
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 6 ++++++
- bignum.c | 3 ++-
- version.h | 10 +++++-----
- 3 files changed, 13 insertions(+), 6 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index 886be66..fae1bb1 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,9 @@
- +Sat Apr 14 18:51:41 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- +
- + * bignum.c (rb_big2str0): prevent working clone from
- + GC. [exerb-dev:0578]. patched by MURASE Masamitsu
- + <masamitsu.murase AT gmail.com> at [exerb-dev:0580]
- +
- Tue Mar 6 12:05:42 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb (Exception.yaml_new): fix bug that causes
- diff --git a/bignum.c b/bignum.c
- index 0c5ae3e..77697ae 100644
- --- a/bignum.c
- +++ b/bignum.c
- @@ -772,7 +772,7 @@
- int base;
- int trim;
- {
- - volatile VALUE t;
- + VALUE t;
- BDIGIT *ds;
- long i, j, hbase;
- VALUE ss;
- @@ -847,6 +847,7 @@
- if (trim && i == 0 && num == 0) break;
- }
- }
- + RB_GC_GUARD(t);
- if (trim) {while (s[j] == '0') j++;}
- i = RSTRING(ss)->len - j;
- if (RBIGNUM(x)->sign) {
- diff --git a/version.h b/version.h
- index 13e41e8..a2b4487 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-03-06"
- +#define RUBY_RELEASE_DATE "2012-04-14"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120306
- -#define RUBY_PATCHLEVEL 360
- +#define RUBY_RELEASE_CODE 20120414
- +#define RUBY_PATCHLEVEL 361
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- -#define RUBY_RELEASE_MONTH 3
- -#define RUBY_RELEASE_DAY 6
- +#define RUBY_RELEASE_MONTH 4
- +#define RUBY_RELEASE_DAY 14
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From a4e76099bf44ae7d75bd24c3c8233d710e590fac Mon Sep 17 00:00:00 2001
- From: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Fri, 11 May 2012 05:09:58 +0000
- Subject: [PATCH 04/19] * ext/bigdecimal/bigdecimal.c (PUSH): to prevent VALUE
- from GC, must not cast it to unsigned long, which may be shorter than
- VALUE, and the result can be mere garbage.
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 6 ++++++
- ext/bigdecimal/bigdecimal.c | 2 +-
- version.h | 10 +++++-----
- 3 files changed, 12 insertions(+), 6 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index fae1bb1..9201d3e 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,9 @@
- +Fri May 11 14:09:48 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- +
- + * ext/bigdecimal/bigdecimal.c (PUSH): to prevent VALUE from GC,
- + must not cast it to unsigned long, which may be shorter than
- + VALUE, and the result can be mere garbage.
- +
- Sat Apr 14 18:51:41 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big2str0): prevent working clone from
- diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c
- index 7846c0d..16be520 100644
- --- a/ext/bigdecimal/bigdecimal.c
- +++ b/ext/bigdecimal/bigdecimal.c
- @@ -32,7 +32,7 @@
-
- /* MACRO's to guard objects from GC by keeping them in stack */
- #define ENTER(n) volatile VALUE vStack[n];int iStack=0
- -#define PUSH(x) vStack[iStack++] = (unsigned long)(x);
- +#define PUSH(x) vStack[iStack++] = (VALUE)(x);
- #define SAVE(p) PUSH(p->obj);
- #define GUARD_OBJ(p,y) {p=y;SAVE(p);}
-
- diff --git a/version.h b/version.h
- index a2b4487..9dcae40 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-04-14"
- +#define RUBY_RELEASE_DATE "2012-05-11"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120414
- -#define RUBY_PATCHLEVEL 361
- +#define RUBY_RELEASE_CODE 20120511
- +#define RUBY_PATCHLEVEL 362
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- -#define RUBY_RELEASE_MONTH 4
- -#define RUBY_RELEASE_DAY 14
- +#define RUBY_RELEASE_MONTH 5
- +#define RUBY_RELEASE_DAY 11
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From b0901e0f63ed056c9c95273052a029930cad87af Mon Sep 17 00:00:00 2001
- From: knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Mon, 21 May 2012 07:35:21 +0000
- Subject: [PATCH 05/19] * ext/syslog/syslog.c (mSyslog_inspect): Make sure self
- is a module before calling rb_class2name().
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35746 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 5 +++++
- ext/syslog/syslog.c | 2 ++
- 2 files changed, 7 insertions(+)
- diff --git a/ChangeLog b/ChangeLog
- index 9201d3e..3c477b4 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,8 @@
- +Mon May 21 16:29:47 2012 Akinori MUSHA <knu@iDaemons.org>
- +
- + * ext/syslog/syslog.c (mSyslog_inspect): Make sure self is a
- + module before calling rb_class2name().
- +
- Fri May 11 14:09:48 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (PUSH): to prevent VALUE from GC,
- diff --git a/ext/syslog/syslog.c b/ext/syslog/syslog.c
- index ecc4931..1372cb7 100644
- --- a/ext/syslog/syslog.c
- +++ b/ext/syslog/syslog.c
- @@ -168,6 +168,8 @@ static VALUE mSyslog_inspect(VALUE self)
- {
- char buf[1024];
-
- + Check_Type(self, T_MODULE);
- +
- if (syslog_opened) {
- snprintf(buf, sizeof(buf),
- "<#%s: opened=true, ident=\"%s\", options=%d, facility=%d, mask=%d>",
- --
- 1.8.5.1
- From c869f69c3543552c0ffa27628d587bae460b6213 Mon Sep 17 00:00:00 2001
- From: svn <svn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Mon, 21 May 2012 07:35:26 +0000
- Subject: [PATCH 06/19] * 2012-05-21
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35747 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- version.h | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
- diff --git a/version.h b/version.h
- index 9dcae40..927ae53 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,7 +1,7 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-05-11"
- +#define RUBY_RELEASE_DATE "2012-05-21"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120511
- +#define RUBY_RELEASE_CODE 20120521
- #define RUBY_PATCHLEVEL 362
-
- #define RUBY_VERSION_MAJOR 1
- @@ -9,7 +9,7 @@
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- #define RUBY_RELEASE_MONTH 5
- -#define RUBY_RELEASE_DAY 11
- +#define RUBY_RELEASE_DAY 21
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From 69883b3ee6502cc210e598fd440b65e20629cd9c Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Wed, 6 Jun 2012 05:20:08 +0000
- Subject: [PATCH 07/19] merge revision(s) 33611: *
- lib/webrick/utils.rb: fix fcntl call. * lib/drb/unix.rb: ditto.
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 6 ++++++
- lib/drb/unix.rb | 2 +-
- lib/webrick/utils.rb | 2 +-
- version.h | 10 +++++-----
- 4 files changed, 13 insertions(+), 7 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index 3c477b4..dd5808a 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,9 @@
- +Wed Jun 6 14:06:02 2012 Tanaka Akira <akr@fsij.org>
- +
- + * lib/webrick/utils.rb: fix fcntl call.
- +
- + * lib/drb/unix.rb: ditto.
- +
- Mon May 21 16:29:47 2012 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/syslog/syslog.c (mSyslog_inspect): Make sure self is a
- diff --git a/lib/drb/unix.rb b/lib/drb/unix.rb
- index 57feed8..90ca292 100644
- --- a/lib/drb/unix.rb
- +++ b/lib/drb/unix.rb
- @@ -100,7 +100,7 @@ def accept
- end
-
- def set_sockopt(soc)
- - soc.fcntl(Fcntl::F_SETFL, Fcntl::FD_CLOEXEC) if defined? Fcntl::FD_CLOEXEC
- + soc.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::FD_CLOEXEC
- end
- end
-
- diff --git a/lib/webrick/utils.rb b/lib/webrick/utils.rb
- index cf9da6f..1c29ef5 100644
- --- a/lib/webrick/utils.rb
- +++ b/lib/webrick/utils.rb
- @@ -29,7 +29,7 @@ def set_non_blocking(io)
-
- def set_close_on_exec(io)
- if defined?(Fcntl::FD_CLOEXEC)
- - io.fcntl(Fcntl::FD_CLOEXEC, 1)
- + io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
- end
- end
- module_function :set_close_on_exec
- diff --git a/version.h b/version.h
- index 927ae53..d084c57 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-05-21"
- +#define RUBY_RELEASE_DATE "2012-06-06"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120521
- -#define RUBY_PATCHLEVEL 362
- +#define RUBY_RELEASE_CODE 20120606
- +#define RUBY_PATCHLEVEL 363
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- -#define RUBY_RELEASE_MONTH 5
- -#define RUBY_RELEASE_DAY 21
- +#define RUBY_RELEASE_MONTH 6
- +#define RUBY_RELEASE_DAY 6
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From 996e9cf4e9c78c4bf8fdbf937f3984e0b2eb6e40 Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Wed, 6 Jun 2012 05:34:55 +0000
- Subject: [PATCH 08/19] @nobu you must run make test-all _before_ you check in.
- reverting revision r34920 because it fails.
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35940 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- lib/yaml/rubytypes.rb | 3 +--
- test/yaml/test_exception.rb | 52 ---------------------------------------------
- version.h | 2 +-
- 3 files changed, 2 insertions(+), 55 deletions(-)
- delete mode 100644 test/yaml/test_exception.rb
- diff --git a/lib/yaml/rubytypes.rb b/lib/yaml/rubytypes.rb
- index 55d59fa..35b7191 100644
- --- a/lib/yaml/rubytypes.rb
- +++ b/lib/yaml/rubytypes.rb
- @@ -117,8 +117,7 @@ def to_yaml( opts = {} )
- class Exception
- yaml_as "tag:ruby.yaml.org,2002:exception"
- def Exception.yaml_new( klass, tag, val )
- - o = klass.allocate
- - Exception.instance_method(:initialize).bind(o).call(val.delete('message'))
- + o = YAML.object_maker( klass, { 'mesg' => val.delete( 'message' ) } )
- val.each_pair do |k,v|
- o.instance_variable_set("@#{k}", v)
- end
- diff --git a/test/yaml/test_exception.rb b/test/yaml/test_exception.rb
- deleted file mode 100644
- index 1dc3044..0000000
- --- a/test/yaml/test_exception.rb
- +++ /dev/null
- @@ -1,52 +0,0 @@
- -require 'test/unit'
- -require 'yaml'
- -
- -module Syck
- - class TestException < Test::Unit::TestCase
- - class Wups < Exception
- - attr_reader :foo, :bar
- - def initialize *args
- - super
- - @foo = 1
- - @bar = 2
- - end
- -
- - def ==(other)
- - self.class == other.class and
- - self.message == other.message and
- - self.backtrace == other.backtrace
- - end
- - end
- -
- - def setup
- - @wups = Wups.new('test_message')
- - end
- -
- - def test_to_yaml
- - w = YAML.load(@wups.to_yaml)
- - assert_equal @wups, w
- - assert_equal 1, w.foo
- - assert_equal 2, w.bar
- - end
- -
- - def test_dump
- - w = YAML.load(@wups.to_yaml)
- - assert_equal @wups, w
- - assert_equal 1, w.foo
- - assert_equal 2, w.bar
- - end
- -
- - def test_to_yaml_properties
- - class << @wups
- - def to_yaml_properties
- - [:@foo]
- - end
- - end
- -
- - w = YAML.load(YAML.dump(@wups))
- - assert_equal @wups, w
- - assert_equal 1, w.foo
- - assert_nil w.bar
- - end
- - end
- -end
- diff --git a/version.h b/version.h
- index d084c57..3b58c4e 100644
- --- a/version.h
- +++ b/version.h
- @@ -2,7 +2,7 @@
- #define RUBY_RELEASE_DATE "2012-06-06"
- #define RUBY_VERSION_CODE 187
- #define RUBY_RELEASE_CODE 20120606
- -#define RUBY_PATCHLEVEL 363
- +#define RUBY_PATCHLEVEL 364
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- --
- 1.8.5.1
- From 1acfb03370704aee624b7a1e5ccf4776f40f2895 Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Wed, 6 Jun 2012 05:47:45 +0000
- Subject: [PATCH 09/19] merge revision(s) 28324: * bignum.c
- (rb_big2dbl), test/ruby/test_bignum.rb (test_to_f): A negative Bignum
- out of Float range should be converted to -Infinity. [ruby-core:30492]
- [Bug #3362]
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 15 ++++++---------
- bignum.c | 5 ++++-
- test/ruby/test_bignum.rb | 6 ++++++
- version.h | 2 +-
- 4 files changed, 17 insertions(+), 11 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index dd5808a..69c7ced 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,9 @@
- +Wed Jun 6 14:44:13 2012 Kenta Murata <mrkn@mrkn.jp>
- +
- + * bignum.c (rb_big2dbl), test/ruby/test_bignum.rb (test_to_f):
- + A negative Bignum out of Float range should be converted to -Infinity.
- + [ruby-core:30492] [Bug #3362]
- +
- Wed Jun 6 14:06:02 2012 Tanaka Akira <akr@fsij.org>
-
- * lib/webrick/utils.rb: fix fcntl call.
- @@ -21,15 +27,6 @@ Sat Apr 14 18:51:41 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- GC. [exerb-dev:0578]. patched by MURASE Masamitsu
- <masamitsu.murase AT gmail.com> at [exerb-dev:0580]
-
- -Tue Mar 6 12:05:42 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- -
- - * lib/yaml/rubytypes.rb (Exception.yaml_new): fix bug that causes
- - YAML serialization problem for Exception.
- - Exception#initialize doesn't use visible instance variable for
- - the exception message, so call the method with the message.
- - patched by Jingwen Owen Ou <jingweno AT gmail.com>.
- - http://github.com/ruby/ruby/pull/41
- -
- Fri Mar 2 11:44:33 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (mark_dump_arg): mark destination string. patch by
- diff --git a/bignum.c b/bignum.c
- index 77697ae..6c0bf65 100644
- --- a/bignum.c
- +++ b/bignum.c
- @@ -1069,7 +1069,10 @@
-
- if (isinf(d)) {
- rb_warn("Bignum out of Float range");
- - d = HUGE_VAL;
- + if (d < 0.0)
- + d = -HUGE_VAL;
- + else
- + d = HUGE_VAL;
- }
- return d;
- }
- diff --git a/test/ruby/test_bignum.rb b/test/ruby/test_bignum.rb
- index 99c5952..a0405ca 100644
- --- a/test/ruby/test_bignum.rb
- +++ b/test/ruby/test_bignum.rb
- @@ -103,4 +103,10 @@ def test_too_big_to_s
- e = assert_raise(RangeError) {(1 << big).to_s}
- assert_match(/too big to convert/, e.message)
- end
- +
- + def test_to_f
- + inf = 1 / 0.0
- + assert_equal(inf, (1 << 65536).to_f)
- + assert_equal(-inf, (-1 << 65536).to_f) # [ruby-core:30492] [Bug #3362]
- + end
- end
- diff --git a/version.h b/version.h
- index 3b58c4e..3d64d07 100644
- --- a/version.h
- +++ b/version.h
- @@ -2,7 +2,7 @@
- #define RUBY_RELEASE_DATE "2012-06-06"
- #define RUBY_VERSION_CODE 187
- #define RUBY_RELEASE_CODE 20120606
- -#define RUBY_PATCHLEVEL 364
- +#define RUBY_PATCHLEVEL 365
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- --
- 1.8.5.1
- From d18b653719687756c82c7c800dee5e91b388fefd Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Wed, 6 Jun 2012 06:16:25 +0000
- Subject: [PATCH 10/19] merge revision(s) 23432: * eval.c
- (rb_thread_join), ext/thread/thread.c (wake_one): adjusts targets of
- rest waiting threads to join. [ruby-core:23457]
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35942 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 5 ++++
- eval.c | 10 ++++++++
- ext/thread/thread.c | 26 +++++++++++++++++--
- test/thread/test_thread.rb | 63 ++++++++++++++++++++++++++++++++++++++++++++++
- version.h | 2 +-
- 5 files changed, 103 insertions(+), 3 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index 69c7ced..8956096 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,8 @@
- +Wed Jun 6 15:09:00 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- +
- + * eval.c (rb_thread_join), ext/thread/thread.c (wake_one): adjusts
- + targets of rest waiting threads to join. [ruby-core:23457]
- +
- Wed Jun 6 14:44:13 2012 Kenta Murata <mrkn@mrkn.jp>
-
- * bignum.c (rb_big2dbl), test/ruby/test_bignum.rb (test_to_f):
- diff --git a/test/thread/test_thread.rb b/test/thread/test_thread.rb
- index 699f4fe..e3246d1 100644
- --- a/test/thread/test_thread.rb
- +++ b/test/thread/test_thread.rb
- @@ -86,5 +86,68 @@ def test_queue_rescue
- assert_nothing_raised("[ruby-dev:37545]") {assert_equal(1, queue.pop)}
- assert(queue.empty?)
- end
- +
- + # This test checks that a thread in Mutex#lock which is raised is
- + # completely removed from the wait_list of the mutex
- + def test_mutex_exception_handling
- + m = Mutex.new
- + m.lock
- +
- + sleeping = false
- + t = Thread.new do
- + begin
- + m.lock
- + rescue
- + end
- +
- + sleeping = true
- + # Keep that thread alive: if the thread returns, the test method
- + # won't be able to check that +m+ has not been taken (dead mutex
- + # owners are ignored)
- + sleep
- + end
- +
- + # Wait for t to wait for the mutex and raise it
- + while true
- + sleep 0.1
- + break if t.stop?
- + end
- + t.raise ArgumentError
- + assert(t.alive? || sleeping)
- +
- + # Wait for +t+ to reach the sleep
- + while true
- + sleep 0.1
- + break if t.stop?
- + end
- +
- + # Now unlock. The mutex should be free, so Mutex#unlock should return nil
- + assert(! m.unlock)
- + end
- +
- + def test_mutex_join
- + m = Mutex.new
- + m.lock
- + wt2 = Thread.new do
- + m.lock
- + sleep 0.5
- + m.unlock
- + end
- +
- + # Ensure wt2 is waiting on m
- + sleep 0.1
- +
- + wt1 = Thread.new do
- + m.lock
- + m.unlock
- + end
- + # Ensure wt1 is waiting on m
- + sleep 0.1
- +
- + # Give it to wt2
- + m.unlock
- +
- + assert_nothing_raised {wt1.join}
- + end
- end
-
- diff --git a/version.h b/version.h
- index 3d64d07..293cd6e 100644
- --- a/version.h
- +++ b/version.h
- @@ -2,7 +2,7 @@
- #define RUBY_RELEASE_DATE "2012-06-06"
- #define RUBY_VERSION_CODE 187
- #define RUBY_RELEASE_CODE 20120606
- -#define RUBY_PATCHLEVEL 365
- +#define RUBY_PATCHLEVEL 366
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- --
- 1.8.5.1
- From 15fbb87b594a47ed622829cfdd6891eb97ea4726 Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Thu, 7 Jun 2012 10:05:59 +0000
- Subject: [PATCH 11/19] merge revision(s) 30993: *
- ext/bigdecimal/bigdecimal.c (VpMemAlloc): Fixes a bug reported by Drew Yao
- <ayao at apple.com>
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35953 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 5 +++++
- ext/bigdecimal/bigdecimal.c | 8 ++++----
- version.h | 8 ++++----
- 3 files changed, 13 insertions(+), 8 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index 8956096..3ac2f87 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,8 @@
- +Thu Jun 7 19:00:35 2012 Kenta Murata <mrkn@mrkn.jp>
- +
- + * ext/bigdecimal/bigdecimal.c (VpMemAlloc): Fixes a bug reported
- + by Drew Yao <ayao at apple.com>
- +
- Wed Jun 6 15:09:00 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_join), ext/thread/thread.c (wake_one): adjusts
- diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c
- index 16be520..7ebb3f7 100644
- --- a/ext/bigdecimal/bigdecimal.c
- +++ b/ext/bigdecimal/bigdecimal.c
- @@ -2032,11 +2032,11 @@
- VP_EXPORT void *
- VpMemAlloc(U_LONG mb)
- {
- - void *p = xmalloc((unsigned int)mb);
- - if(!p) {
- - VpException(VP_EXCEPTION_MEMORY,"failed to allocate memory",1);
- + void *p = xmalloc(mb);
- + if (!p) {
- + VpException(VP_EXCEPTION_MEMORY, "failed to allocate memory", 1);
- }
- - memset(p,0,mb);
- + memset(p, 0, mb);
- #ifdef _DEBUG
- gnAlloc++; /* Count allocation call */
- #endif /* _DEBUG */
- diff --git a/version.h b/version.h
- index 293cd6e..7a53a5c 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-06-06"
- +#define RUBY_RELEASE_DATE "2012-06-07"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120606
- -#define RUBY_PATCHLEVEL 366
- +#define RUBY_RELEASE_CODE 20120607
- +#define RUBY_PATCHLEVEL 367
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- #define RUBY_RELEASE_MONTH 6
- -#define RUBY_RELEASE_DAY 6
- +#define RUBY_RELEASE_DAY 7
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From ef73b34c87f52be6a87e0f7ab8d5a03bfcaa983f Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Sat, 9 Jun 2012 18:12:07 +0000
- Subject: [PATCH 12/19] merge revision(s) 32542: * eval.c
- (ruby_setjmp): need to save the stack after r2 (the Table of Contents
- on ppc64) is saved onto the stack by getcontext(). based on
- <https://bugzilla.redhat.com/show_bug.cgi?id=628715>. Bug#4411
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@35995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 7 +++++++
- eval.c | 18 ++++++++++++++----
- version.h | 8 ++++----
- 3 files changed, 25 insertions(+), 8 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index 3ac2f87..9637df1 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,10 @@
- +Sun Jun 10 03:00:21 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- +
- + * eval.c (ruby_setjmp): need to save the stack after r2 (the Table
- + of Contents on ppc64) is saved onto the stack by getcontext().
- + based on <https://bugzilla.redhat.com/show_bug.cgi?id=628715>.
- + Bug#4411
- +
- Thu Jun 7 19:00:35 2012 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpMemAlloc): Fixes a bug reported
- diff --git a/eval.c b/eval.c
- index c350159..4458dff 100644
- --- a/eval.c
- +++ b/eval.c
- @@ -179,6 +179,9 @@
- (function_call_may_return_twice_false_2 ? \
- setjmp(function_call_may_return_twice_jmp_buf) : \
- 0)
- +# elif defined(__PPC64__)
- +# define JUST_BEFORE_SETJMP(extra_save, j) ((void)0)
- +# define JUST_AFTER_SETJMP(extra_save, j) ((j)->status ? (void)0 : (extra_save))
- # elif defined(__FreeBSD__) && __FreeBSD__ < 7
- /*
- * workaround for FreeBSD/i386 getcontext/setcontext bug.
- @@ -196,16 +199,23 @@
- # ifndef POST_GETCONTEXT
- # define POST_GETCONTEXT 0
- # endif
- +# ifndef JUST_BEFORE_SETJMP
- +# define JUST_BEFORE_SETJMP(extra_save, j) (extra_save)
- +# endif
- +# ifndef JUST_AFTER_SETJMP
- +# define JUST_AFTER_SETJMP(extra_save, j) ((void)0)
- +# endif
- # define ruby_longjmp(env, val) rb_jump_context(env, val)
- -# define ruby_setjmp(just_before_setjmp, j) ((j)->status = 0, \
- - (just_before_setjmp), \
- +# define ruby_setjmp(extra_save, j) ((j)->status = 0, \
- + JUST_BEFORE_SETJMP(extra_save, j), \
- PRE_GETCONTEXT, \
- getcontext(&(j)->context), \
- POST_GETCONTEXT, \
- + JUST_AFTER_SETJMP(extra_save, j), \
- (j)->status)
- #else
- -# define ruby_setjmp(just_before_setjmp, env) \
- - ((just_before_setjmp), RUBY_SETJMP(env))
- +# define ruby_setjmp(extra_save, env) \
- + ((extra_save), RUBY_SETJMP(env))
- # define ruby_longjmp(env,val) RUBY_LONGJMP(env,val)
- # ifdef __CYGWIN__
- int _setjmp(), _longjmp();
- diff --git a/version.h b/version.h
- index 7a53a5c..6341599 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-06-07"
- +#define RUBY_RELEASE_DATE "2012-06-10"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120607
- -#define RUBY_PATCHLEVEL 367
- +#define RUBY_RELEASE_CODE 20120610
- +#define RUBY_PATCHLEVEL 368
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- #define RUBY_RELEASE_MONTH 6
- -#define RUBY_RELEASE_DAY 7
- +#define RUBY_RELEASE_DAY 10
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From d761c9b178d8a2b7757ca5ea41135c7ea37c70b2 Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Mon, 18 Jun 2012 09:53:29 +0000
- Subject: [PATCH 13/19] merge revision(s) 32605:32610: * backport r32609 from
- trunk. * ext/openssl/ossl_hmac.c: Revert checking return type of
- HMAC_Init_ex as it is not compatible with OpenSSL < 1.0.0. * backport
- r32606 from trunk. * ext/openssl/ossl_digest.c: Check return value of
- EVP_DigestInit_ex. * ext/openssl/ossl_hmac.c: Check return value of
- HMAC_Init_ex. Thanks, Jared Jennings, for the patch. [ Ruby 1.9 -
- Bug #4944 ] [ruby-core:37670]
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@36126 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 16 ++++++++++++++++
- ext/openssl/ossl_digest.c | 12 +++++++++---
- version.h | 8 ++++----
- 3 files changed, 29 insertions(+), 7 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index 9637df1..e7445fa 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,19 @@
- +Mon Jun 18 18:32:43 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
- +
- + * backport r32609 from trunk.
- +
- + * ext/openssl/ossl_hmac.c: Revert checking return type of
- + HMAC_Init_ex as it is not compatible with OpenSSL < 1.0.0.
- +
- +Mon Jun 18 18:32:43 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
- +
- + * backport r32606 from trunk.
- +
- + * ext/openssl/ossl_digest.c: Check return value of EVP_DigestInit_ex.
- + * ext/openssl/ossl_hmac.c: Check return value of HMAC_Init_ex.
- + Thanks, Jared Jennings, for the patch.
- + [ Ruby 1.9 - Bug #4944 ] [ruby-core:37670]
- +
- Sun Jun 10 03:00:21 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_setjmp): need to save the stack after r2 (the Table
- diff --git a/ext/openssl/ossl_digest.c b/ext/openssl/ossl_digest.c
- index 879d399..13111ce 100644
- --- a/ext/openssl/ossl_digest.c
- +++ b/ext/openssl/ossl_digest.c
- @@ -62,7 +62,9 @@
-
- ret = ossl_digest_alloc(cDigest);
- GetDigest(ret, ctx);
- - EVP_DigestInit_ex(ctx, md, NULL);
- + if (EVP_DigestInit_ex(ctx, md, NULL) != 1) {
- + ossl_raise(eDigestError, "Digest initialization failed.");
- + }
-
- return ret;
- }
- @@ -104,7 +106,9 @@
- if (!NIL_P(data)) StringValue(data);
-
- GetDigest(self, ctx);
- - EVP_DigestInit_ex(ctx, md, NULL);
- + if (EVP_DigestInit_ex(ctx, md, NULL) != 1) {
- + ossl_raise(eDigestError, "Digest initialization failed.");
- + }
-
- if (!NIL_P(data)) return ossl_digest_update(self, data);
- return self;
- @@ -138,7 +142,9 @@
- EVP_MD_CTX *ctx;
-
- GetDigest(self, ctx);
- - EVP_DigestInit_ex(ctx, EVP_MD_CTX_md(ctx), NULL);
- + if (EVP_DigestInit_ex(ctx, EVP_MD_CTX_md(ctx), NULL) != 1) {
- + ossl_raise(eDigestError, "Digest initialization failed.");
- + }
-
- return self;
- }
- diff --git a/version.h b/version.h
- index 6341599..7b2f01a 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-06-10"
- +#define RUBY_RELEASE_DATE "2012-06-18"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120610
- -#define RUBY_PATCHLEVEL 368
- +#define RUBY_RELEASE_CODE 20120618
- +#define RUBY_PATCHLEVEL 369
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- #define RUBY_RELEASE_MONTH 6
- -#define RUBY_RELEASE_DAY 10
- +#define RUBY_RELEASE_DAY 18
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From e48d99f0e574a36f0e9c7337b396a437cbff4cc5 Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Fri, 29 Jun 2012 12:31:25 +0000
- Subject: [PATCH 14/19] merge revision(s) 36251: * eval.c
- (stack_extend): prevent ALLOCA_N, which reserves a memory space with
- for restoring machine stack stored in each threads, from optimization
- out. backport r34278 from the trunk.
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@36253 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 6 ++++++
- eval.c | 2 ++
- version.h | 8 ++++----
- 3 files changed, 12 insertions(+), 4 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index e7445fa..2d4bcb0 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,9 @@
- +Fri Jun 29 21:26:05 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- +
- + * eval.c (stack_extend): prevent ALLOCA_N, which reserves a memory
- + space with for restoring machine stack stored in each threads, from
- + optimization out. backport r34278 from the trunk.
- +
- Mon Jun 18 18:32:43 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * backport r32609 from trunk.
- diff --git a/version.h b/version.h
- index 7b2f01a..d90d5b1 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-06-18"
- +#define RUBY_RELEASE_DATE "2012-06-29"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120618
- -#define RUBY_PATCHLEVEL 369
- +#define RUBY_RELEASE_CODE 20120629
- +#define RUBY_PATCHLEVEL 370
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- #define RUBY_RELEASE_MONTH 6
- -#define RUBY_RELEASE_DAY 18
- +#define RUBY_RELEASE_DAY 29
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From 2ac236dcbd90bd33bfeac4f699763c3baef4038e Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Fri, 12 Oct 2012 04:05:35 +0000
- Subject: [PATCH 15/19] * error.c (name_err_to_s): we need not infect msg.
- * test/ruby/test_exception.rb (TestException#test_exception_to_s_should_not_propagate_untrustedness): test for it.
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@37148 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 6 ++++++
- error.c | 3 ---
- test/ruby/test_exception.rb | 30 +++++++++++++++++++++++++++++-
- version.h | 10 +++++-----
- 4 files changed, 40 insertions(+), 9 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index 2d4bcb0..e2e1059 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,9 @@
- +Fri Oct 12 12:25:15 2012 URABE Shyouhei <shyouhei@ruby-lang.org>
- +
- + * error.c (name_err_to_s): we need not infect msg.
- +
- + * test/ruby/test_exception.rb (TestException#test_exception_to_s_should_not_propagate_untrustedness): test for it.
- +
- Fri Jun 29 21:26:05 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (stack_extend): prevent ALLOCA_N, which reserves a memory
- diff --git a/error.c b/error.c
- index 59b445e..2b3bf3f 100644
- --- a/error.c
- +++ b/error.c
- @@ -665,9 +665,6 @@
-
- if (NIL_P(mesg)) return rb_class_name(CLASS_OF(exc));
- StringValue(str);
- - if (str != mesg) {
- - OBJ_INFECT(str, mesg);
- - }
- return str;
- }
-
- diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb
- index c5f4091..434838f 100644
- --- a/test/ruby/test_exception.rb
- +++ b/test/ruby/test_exception.rb
- @@ -204,6 +204,34 @@ def o.to_str
- o.taint
- e = NameError.new(o)
- s = e.to_s
- - assert_equal(true, s.tainted?)
- + assert_equal(false, s.tainted?)
- + end
- +
- + def test_exception_to_s_should_not_propagate_untrustedness
- + favorite_lang = "Ruby"
- +
- + for exc in [Exception, NameError]
- + assert_raise(SecurityError) do
- + lambda {
- + $SAFE = 4
- + exc.new(favorite_lang).to_s
- + favorite_lang.replace("Python")
- + }.call
- + end
- + end
- +
- + assert_raise(SecurityError) do
- + lambda {
- + $SAFE = 4
- + o = Object.new
- + (class << o; self; end).send(:define_method, :to_str) {
- + favorite_lang
- + }
- + NameError.new(o).to_s
- + favorite_lang.replace("Python")
- + }.call
- + end
- +
- + assert_equal("Ruby", favorite_lang)
- end
- end
- diff --git a/version.h b/version.h
- index d90d5b1..e509ed2 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-06-29"
- +#define RUBY_RELEASE_DATE "2012-10-12"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20120629
- -#define RUBY_PATCHLEVEL 370
- +#define RUBY_RELEASE_CODE 20121012
- +#define RUBY_PATCHLEVEL 371
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2012
- -#define RUBY_RELEASE_MONTH 6
- -#define RUBY_RELEASE_DAY 29
- +#define RUBY_RELEASE_MONTH 10
- +#define RUBY_RELEASE_DAY 12
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From eca9bf617ab517b73598f449388b543d19c72b7d Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Sat, 18 May 2013 14:55:14 +0000
- Subject: [PATCH 16/19] merge revision(s) 39384,39509,39511: [Backport #7961]
- * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
- new attribute to read/write entity expansion text limit. the default
- limit is 10Kb.
- * lib/rexml/text.rb (REXML::Text.unnormalize): check above attribute.
- * lib/rexml/document.rb: move entity_expansion_limit accessor to ...
- * lib/rexml/rexml.rb: ... here to make rexml/text independent from
- REXML::Document. It causes circular require.
- * lib/rexml/document.rb (REXML::Document.entity_expansion_limit):
- deprecated.
- * lib/rexml/document.rb (REXML::Document.entity_expansion_limit=):
- deprecated.
- * lib/rexml/text.rb: add missing require "rexml/rexml" for
- REXML.entity_expansion_limit.
- Reported by Robert Ulejczyk. Thanks!!! [ruby-core:52895] [Bug #7961]
- * lib/rexml/document.rb: move entity_expansion_text_limit accessor to ...
- * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
- * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit=):
- REXML.entity_expansion_text_limit.
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@40812 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 21 ++++++++++++++++++++
- lib/rexml/document.rb | 14 ++++++++++++++
- lib/rexml/rexml.rb | 12 ++++++++++++
- lib/rexml/text.rb | 53 +++++++++++++++++++++++++--------------------------
- version.h | 12 ++++++------
- 5 files changed, 79 insertions(+), 33 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index e2e1059..c80774f 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,24 @@
- +Sat May 18 23:34:50 2013 Kouhei Sutou <kou@cozmixng.org>
- +
- + * lib/rexml/document.rb: move entity_expansion_text_limit accessor to ...
- + * lib/rexml/rexml.rb: ... here to make rexml/text independent from
- + REXML::Document. It causes circular require.
- + * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
- + deprecated.
- + * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit=):
- + deprecated.
- + * lib/rexml/text.rb: add missing require "rexml/rexml" for
- + REXML.entity_expansion_text_limit.
- + Reported by Robert Ulejczyk. Thanks!!! [ruby-core:52895] [Bug #7961]
- +
- +Sat May 18 23:34:50 2013 Aaron Patterson <aaron@tenderlovemaking.com>
- +
- + * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
- + new attribute to read/write entity expansion text limit. the default
- + limit is 10Kb.
- +
- + * lib/rexml/text.rb (REXML::Text.unnormalize): check above attribute.
- +
- Fri Oct 12 12:25:15 2012 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * error.c (name_err_to_s): we need not infect msg.
- diff --git a/lib/rexml/document.rb b/lib/rexml/document.rb
- index 3d1300a..16a2c77 100644
- --- a/lib/rexml/document.rb
- +++ b/lib/rexml/document.rb
- @@ -213,6 +213,20 @@ def Document::entity_expansion_limit
- return @@entity_expansion_limit
- end
-
- + # Set the entity expansion limit. By default the limit is set to 10240.
- + #
- + # Deprecated. Use REXML.entity_expansion_text_limit= instead.
- + def Document::entity_expansion_text_limit=( val )
- + REXML.entity_expansion_text_limit = val
- + end
- +
- + # Get the entity expansion limit. By default the limit is set to 10000.
- + #
- + # Deprecated. Use REXML.entity_expansion_text_limit instead.
- + def Document::entity_expansion_text_limit
- + return REXML.entity_expansion_text_limit
- + end
- +
- attr_reader :entity_expansion_count
-
- def record_entity_expansion
- diff --git a/lib/rexml/rexml.rb b/lib/rexml/rexml.rb
- index 95bc2a7..8845300 100644
- --- a/lib/rexml/rexml.rb
- +++ b/lib/rexml/rexml.rb
- @@ -29,4 +29,16 @@ module REXML
-
- Copyright = COPYRIGHT
- Version = VERSION
- +
- + @@entity_expansion_text_limit = 10_240
- +
- + # Set the entity expansion limit. By default the limit is set to 10240.
- + def self.entity_expansion_text_limit=( val )
- + @@entity_expansion_text_limit = val
- + end
- +
- + # Get the entity expansion limit. By default the limit is set to 10240.
- + def self.entity_expansion_text_limit
- + return @@entity_expansion_text_limit
- + end
- end
- diff --git a/lib/rexml/text.rb b/lib/rexml/text.rb
- index a4a30b6..b6dbf45 100644
- --- a/lib/rexml/text.rb
- +++ b/lib/rexml/text.rb
- @@ -1,3 +1,4 @@
- +require 'rexml/rexml'
- require 'rexml/entity'
- require 'rexml/doctype'
- require 'rexml/child'
- @@ -308,37 +309,35 @@ def Text::normalize( input, doctype=nil, entity_filter=nil )
-
- # Unescapes all possible entities
- def Text::unnormalize( string, doctype=nil, filter=nil, illegal=nil )
- - rv = string.clone
- - rv.gsub!( /\r\n?/, "\n" )
- - matches = rv.scan( REFERENCE )
- - return rv if matches.size == 0
- - rv.gsub!( NUMERICENTITY ) {|m|
- - m=$1
- - m = "0#{m}" if m[0] == ?x
- - [Integer(m)].pack('U*')
- + sum = 0
- + string.gsub( /\r\n?/, "\n" ).gsub( REFERENCE ) {
- + s = Text.expand($&, doctype, filter)
- + if sum + s.bytesize > REXML.entity_expansion_text_limit
- + raise "entity expansion has grown too large"
- + else
- + sum += s.bytesize
- + end
- + s
- }
- - matches.collect!{|x|x[0]}.compact!
- - if matches.size > 0
- - if doctype
- - matches.each do |entity_reference|
- - unless filter and filter.include?(entity_reference)
- - entity_value = doctype.entity( entity_reference )
- - re = /&#{entity_reference};/
- - rv.gsub!( re, entity_value ) if entity_value
- - end
- - end
- + end
- +
- + def Text.expand(ref, doctype, filter)
- + if ref[1] == ?#
- + if ref[2] == ?x
- + [ref[3...-1].to_i(16)].pack('U*')
- else
- - matches.each do |entity_reference|
- - unless filter and filter.include?(entity_reference)
- - entity_value = DocType::DEFAULT_ENTITIES[ entity_reference ]
- - re = /&#{entity_reference};/
- - rv.gsub!( re, entity_value.value ) if entity_value
- - end
- - end
- + [ref[2...-1].to_i].pack('U*')
- end
- - rv.gsub!( /&/, '&' )
- + elsif ref == '&'
- + '&'
- + elsif filter and filter.include?( ref[1...-1] )
- + ref
- + elsif doctype
- + doctype.entity( ref[1...-1] ) or ref
- + else
- + entity_value = DocType::DEFAULT_ENTITIES[ ref[1...-1] ]
- + entity_value ? entity_value.value : ref
- end
- - rv
- end
- end
- end
- diff --git a/version.h b/version.h
- index e509ed2..2158647 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2012-10-12"
- +#define RUBY_RELEASE_DATE "2013-05-18"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20121012
- -#define RUBY_PATCHLEVEL 371
- +#define RUBY_RELEASE_CODE 20130518
- +#define RUBY_PATCHLEVEL 372
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- -#define RUBY_RELEASE_YEAR 2012
- -#define RUBY_RELEASE_MONTH 10
- -#define RUBY_RELEASE_DAY 12
- +#define RUBY_RELEASE_YEAR 2013
- +#define RUBY_RELEASE_MONTH 5
- +#define RUBY_RELEASE_DAY 18
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From 961bf7496ded3acfe847cf56fa90bbdcfd6e614f Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Thu, 27 Jun 2013 11:22:26 +0000
- Subject: [PATCH 17/19] * ext/openssl/lib/openssl/ssl-internal.rb
- (OpenSSL::SSL#verify_certificate_identity): fix hostname verification.
- Patch by nahi.
- * test/openssl/test_ssl.rb (OpenSSL#test_verify_certificate_identity):
- test for above.
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@41676 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 8 ++++++++
- ext/openssl/lib/openssl/ssl-internal.rb | 18 +++++++++++++-----
- test/openssl/test_ssl.rb | 23 +++++++++++++++++++++++
- version.h | 10 +++++-----
- 4 files changed, 49 insertions(+), 10 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index c80774f..cbba5f0 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,11 @@
- +Thu Jun 27 20:21:18 2013 URABE Shyouhei <shyouhei@ruby-lang.org>
- +
- + * ext/openssl/lib/openssl/ssl-internal.rb (OpenSSL::SSL#verify_certificate_identity):
- + fix hostname verification. Patch by nahi.
- +
- + * test/openssl/test_ssl.rb (OpenSSL#test_verify_certificate_identity):
- + test for above.
- +
- Sat May 18 23:34:50 2013 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/document.rb: move entity_expansion_text_limit accessor to ...
- diff --git a/ext/openssl/lib/openssl/ssl-internal.rb b/ext/openssl/lib/openssl/ssl-internal.rb
- index abf0e8d..9ef6f92 100644
- --- a/ext/openssl/lib/openssl/ssl-internal.rb
- +++ b/ext/openssl/lib/openssl/ssl-internal.rb
- @@ -90,14 +90,22 @@ def verify_certificate_identity(cert, hostname)
- should_verify_common_name = true
- cert.extensions.each{|ext|
- next if ext.oid != "subjectAltName"
- - ext.value.split(/,\s+/).each{|general_name|
- - if /\ADNS:(.*)/ =~ general_name
- + id, ostr = OpenSSL::ASN1.decode(ext.to_der).value
- + sequence = OpenSSL::ASN1.decode(ostr.value)
- + sequence.value.each{|san|
- + case san.tag
- + when 2 # dNSName in GeneralName (RFC5280)
- should_verify_common_name = false
- - reg = Regexp.escape($1).gsub(/\\\*/, "[^.]+")
- + reg = Regexp.escape(san.value).gsub(/\\\*/, "[^.]+")
- return true if /\A#{reg}\z/i =~ hostname
- - elsif /\AIP Address:(.*)/ =~ general_name
- + when 7 # iPAddress in GeneralName (RFC5280)
- should_verify_common_name = false
- - return true if $1 == hostname
- + # follows GENERAL_NAME_print() in x509v3/v3_alt.c
- + if san.value.size == 4
- + return true if san.value.unpack('C*').join('.') == hostname
- + elsif san.value.size == 16
- + return true if san.value.unpack('n*').map { |e| sprintf("%X", e) }.join(':') == hostname
- + end
- end
- }
- }
- diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb
- index 177b684..098ccdd 100644
- --- a/test/openssl/test_ssl.rb
- +++ b/test/openssl/test_ssl.rb
- @@ -547,6 +547,29 @@ def test_unset_OP_ALL
- ssl.close
- }
- end
- +
- + def test_verify_certificate_identity
- + # creating NULL byte SAN certificate
- + ef = OpenSSL::X509::ExtensionFactory.new
- + cert = OpenSSL::X509::Certificate.new
- + cert.subject = OpenSSL::X509::Name.parse "/DC=some/DC=site/CN=Some Site"
- + ext = ef.create_ext('subjectAltName', 'DNS:placeholder,IP:192.168.7.1,IP:13::17')
- + ext_asn1 = OpenSSL::ASN1.decode(ext.to_der)
- + san_list_der = ext_asn1.value.reduce(nil) { |memo,val| val.tag == 4 ? val.value : memo }
- + san_list_asn1 = OpenSSL::ASN1.decode(san_list_der)
- + san_list_asn1.value[0].value = 'www.example.com\0.evil.com'
- + ext_asn1.value[1].value = san_list_asn1.to_der
- + real_ext = OpenSSL::X509::Extension.new ext_asn1
- + cert.add_extension(real_ext)
- +
- + assert_equal(false, OpenSSL::SSL.verify_certificate_identity(cert, 'www.example.com'))
- + assert_equal(true, OpenSSL::SSL.verify_certificate_identity(cert, 'www.example.com\0.evil.com'))
- + assert_equal(false, OpenSSL::SSL.verify_certificate_identity(cert, '192.168.7.255'))
- + assert_equal(true, OpenSSL::SSL.verify_certificate_identity(cert, '192.168.7.1'))
- + assert_equal(false, OpenSSL::SSL.verify_certificate_identity(cert, '13::17'))
- + assert_equal(true, OpenSSL::SSL.verify_certificate_identity(cert, '13:0:0:0:0:0:0:17'))
- + end
- +L
- end
-
- end
- diff --git a/version.h b/version.h
- index 2158647..97111c5 100644
- --- a/version.h
- +++ b/version.h
- @@ -1,15 +1,15 @@
- #define RUBY_VERSION "1.8.7"
- -#define RUBY_RELEASE_DATE "2013-05-18"
- +#define RUBY_RELEASE_DATE "2013-06-27"
- #define RUBY_VERSION_CODE 187
- -#define RUBY_RELEASE_CODE 20130518
- -#define RUBY_PATCHLEVEL 372
- +#define RUBY_RELEASE_CODE 20130627
- +#define RUBY_PATCHLEVEL 373
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- #define RUBY_VERSION_TEENY 7
- #define RUBY_RELEASE_YEAR 2013
- -#define RUBY_RELEASE_MONTH 5
- -#define RUBY_RELEASE_DAY 18
- +#define RUBY_RELEASE_MONTH 6
- +#define RUBY_RELEASE_DAY 27
-
- #ifdef RUBY_EXTERN
- RUBY_EXTERN const char ruby_version[];
- --
- 1.8.5.1
- From 469d4b9389cc2f877f2f17ba248146831d69c66b Mon Sep 17 00:00:00 2001
- From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
- Date: Thu, 27 Jun 2013 11:56:26 +0000
- Subject: [PATCH 18/19] Oops, sorry!
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@41678 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- ---
- ChangeLog | 4 ++++
- test/openssl/test_ssl.rb | 1 -
- version.h | 2 +-
- 3 files changed, 5 insertions(+), 2 deletions(-)
- diff --git a/ChangeLog b/ChangeLog
- index cbba5f0..dbba29d 100644
- --- a/ChangeLog
- +++ b/ChangeLog
- @@ -1,3 +1,7 @@
- +Thu Jun 27 20:55:23 2013 URABE Shyouhei <shyouhei@ruby-lang.org>
- +
- + * test/openssl/test_ssl.rb: Oops, sorry!
- +
- Thu Jun 27 20:21:18 2013 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * ext/openssl/lib/openssl/ssl-internal.rb (OpenSSL::SSL#verify_certificate_identity):
- diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb
- index 098ccdd..2e014f1 100644
- --- a/test/openssl/test_ssl.rb
- +++ b/test/openssl/test_ssl.rb
- @@ -569,7 +569,6 @@ def test_verify_certificate_identity
- assert_equal(false, OpenSSL::SSL.verify_certificate_identity(cert, '13::17'))
- assert_equal(true, OpenSSL::SSL.verify_certificate_identity(cert, '13:0:0:0:0:0:0:17'))
- end
- -L
- end
-
- end
- diff --git a/version.h b/version.h
- index 97111c5..6b6d57e 100644
- --- a/version.h
- +++ b/version.h
- @@ -2,7 +2,7 @@
- #define RUBY_RELEASE_DATE "2013-06-27"
- #define RUBY_VERSION_CODE 187
- #define RUBY_RELEASE_CODE 20130627
- -#define RUBY_PATCHLEVEL 373
- +#define RUBY_PATCHLEVEL 374
-
- #define RUBY_VERSION_MAJOR 1
- #define RUBY_VERSION_MINOR 8
- --
- 1.8.5.1
|