mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	merges r20286 from trunk into ruby_1_9_1.
* ext/syck/rubyext.c (rb_syck_mktime): return DateTime for a value out of range of Time. [ruby-core:19919] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									3a272994a2
								
							
						
					
					
						commit
						6e22e6b73a
					
				
					 3 changed files with 43 additions and 3 deletions
				
			
		|  | @ -1,3 +1,8 @@ | |||
| Wed Nov 19 17:48:05 2008  Yukihiro Matsumoto  <matz@ruby-lang.org> | ||||
| 
 | ||||
| 	* ext/syck/rubyext.c (rb_syck_mktime): return DateTime for a value | ||||
| 	  out of range of Time.   [ruby-core:19919] | ||||
| 
 | ||||
| Sat Nov 22 21:29:54 2008  Yuki Sonoda (Yugui)  <yugui@yugui.jp> | ||||
| 
 | ||||
| 	* test/ruby/test_method.rb (test_default_accessiblity): test case for | ||||
|  |  | |||
|  | @ -50,11 +50,11 @@ typedef struct { | |||
|  * symbols and constants | ||||
|  */ | ||||
| static ID s_new, s_utc, s_at, s_to_f, s_to_i, s_read, s_binmode, s_call, s_cmp, s_transfer, s_update, s_dup, s_haskey, s_match, s_keys, s_unpack, s_tr_bang, s_default_set, s_tag_read_class, s_tag_subclasses, s_resolver, s_push, s_emitter, s_level, s_detect_implicit, s_node_import, s_out, s_input, s_intern, s_transform, s_yaml_new, s_yaml_initialize, s_node_export, s_to_yaml, s_write, s_set_resolver, s_each; | ||||
| static ID s_tags, s_kind, s_name, s_options, s_type_id, s_type_id_set, s_style, s_style_set, s_value, s_value_set; | ||||
| static ID s_tags, s_kind, s_name, s_options, s_type_id, s_type_id_set, s_style, s_style_set, s_value, s_value_set, s_parse; | ||||
| static VALUE sym_model, sym_generic, sym_input, sym_bytecode; | ||||
| static VALUE sym_scalar, sym_seq, sym_map; | ||||
| static VALUE sym_1quote, sym_2quote, sym_fold, sym_literal, sym_plain, sym_inline; | ||||
| static VALUE cDate, cNode, cMap, cSeq, cScalar, cOut, cParser, cResolver, cPrivateType, cDomainType, cYObject, cBadAlias, cDefaultKey, cMergeKey, cEmitter; | ||||
| static VALUE cDate, cNode, cMap, cSeq, cScalar, cOut, cParser, cResolver, cPrivateType, cDomainType, cYObject, cBadAlias, cDefaultKey, cMergeKey, cEmitter, cDateTime; | ||||
| static VALUE oDefaultResolver, oGenericResolver; | ||||
| 
 | ||||
| /*
 | ||||
|  | @ -207,10 +207,17 @@ syck_get_hash_aref(VALUE hsh, VALUE key) | |||
| /*
 | ||||
|  * creating timestamps | ||||
|  */ | ||||
| struct mktime_arg { | ||||
|     char *str; | ||||
|     long len; | ||||
| }; | ||||
| 
 | ||||
| SYMID | ||||
| rb_syck_mktime(char *str, long len) | ||||
| mktime_do(struct mktime_arg *arg) | ||||
| { | ||||
|     VALUE time; | ||||
|     char *str = arg->str; | ||||
|     long len = arg->len; | ||||
|     char *ptr = str; | ||||
|     VALUE year = INT2FIX(0); | ||||
|     VALUE mon = INT2FIX(0); | ||||
|  | @ -312,6 +319,29 @@ rb_syck_mktime(char *str, long len) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| SYMID | ||||
| mktime_r(struct mktime_arg *arg) | ||||
| { | ||||
|     if (!cDateTime) { | ||||
|         /*
 | ||||
|          * Load Date module | ||||
|          */ | ||||
|         rb_require("date"); | ||||
|         cDateTime = rb_const_get(rb_cObject, rb_intern("DateTime")); | ||||
|     } | ||||
|     return rb_funcall(cDateTime, s_parse, 1, rb_str_new(arg->str, arg->len)); | ||||
| } | ||||
| 
 | ||||
| SYMID | ||||
| rb_syck_mktime(char *str, long len) | ||||
| { | ||||
|     struct mktime_arg a; | ||||
| 
 | ||||
|     a.str = str; | ||||
|     a.len = len; | ||||
|     return rb_rescue2(mktime_do, (VALUE)&a, mktime_r, (VALUE)&a, rb_eArgError, NULL); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * handles merging of an array of hashes | ||||
|  * (see http://www.yaml.org/type/merge/)
 | ||||
|  | @ -2112,6 +2142,7 @@ Init_syck() | |||
|     s_yaml_new = rb_intern("yaml_new"); | ||||
|     s_yaml_initialize = rb_intern("yaml_initialize"); | ||||
|     s_each = rb_intern("each"); | ||||
|     s_parse = rb_intern("parse"); | ||||
| 
 | ||||
|     s_tags = rb_intern("@tags"); | ||||
|     s_name = rb_intern("@name"); | ||||
|  |  | |||
|  | @ -1306,6 +1306,10 @@ EOY | |||
|       raise "id collision in ordered map" if omap.to_yaml =~ /id\d+/ | ||||
|     end | ||||
| 
 | ||||
|     def test_date_out_of_range | ||||
|       assert_nothing_raised{YAML::load('1900-01-01T00:00:00+00:00')} | ||||
|     end | ||||
| 
 | ||||
|     def test_normal_exit | ||||
|       YAML.load("2000-01-01 00:00:00.#{"0"*1000} +00:00\n") | ||||
|       # '[ruby-core:13735]' | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 yugui
						yugui