mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* ext/dl/cfunc.c (rb_dlcfunc_call): add taint check.
* ext/dl/dl.c (rb_dl_malloc): add rb_secure(2). * ext/dl/dl.c (rb_dl_realloc): ditto. * ext/dl/dl.c (rb_dl_free): ditto. * ext/dl/dl.c (rb_dl_ptr2value): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18496 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									35b6abbca2
								
							
						
					
					
						commit
						199a95775b
					
				
					 4 changed files with 30 additions and 8 deletions
				
			
		
							
								
								
									
										12
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								ChangeLog
									
										
									
									
									
								
							|  | @ -1,3 +1,15 @@ | ||||||
|  | Mon Aug 11 20:27:12 2008  Yukihiro Matsumoto  <matz@ruby-lang.org> | ||||||
|  | 
 | ||||||
|  | 	* ext/dl/cfunc.c (rb_dlcfunc_call): add taint check. | ||||||
|  | 
 | ||||||
|  | 	* ext/dl/dl.c (rb_dl_malloc): add rb_secure(2). | ||||||
|  | 
 | ||||||
|  | 	* ext/dl/dl.c (rb_dl_realloc): ditto. | ||||||
|  | 
 | ||||||
|  | 	* ext/dl/dl.c (rb_dl_free): ditto. | ||||||
|  | 
 | ||||||
|  | 	* ext/dl/dl.c (rb_dl_ptr2value): ditto. | ||||||
|  | 
 | ||||||
| Mon Aug 11 20:11:21 2008  Nobuyoshi Nakada  <nobu@ruby-lang.org> | Mon Aug 11 20:11:21 2008  Nobuyoshi Nakada  <nobu@ruby-lang.org> | ||||||
| 
 | 
 | ||||||
| 	* gc.c (getrusage_time): works only if RUSAGE_SELF is defined right | 	* gc.c (getrusage_time): works only if RUSAGE_SELF is defined right | ||||||
|  |  | ||||||
|  | @ -260,6 +260,7 @@ rb_dlcfunc_call(VALUE self, VALUE ary) | ||||||
| 	if( i >= DLSTACK_SIZE ){ | 	if( i >= DLSTACK_SIZE ){ | ||||||
| 	    rb_raise(rb_eDLError, "too many arguments (stack overflow)"); | 	    rb_raise(rb_eDLError, "too many arguments (stack overflow)"); | ||||||
| 	} | 	} | ||||||
|  | 	rb_check_safe_obj(RARRAY_PTR(ary)[i]); | ||||||
| 	stack[i] = NUM2LONG(RARRAY_PTR(ary)[i]); | 	stack[i] = NUM2LONG(RARRAY_PTR(ary)[i]); | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |  | ||||||
|  | @ -416,29 +416,33 @@ rb_dlptr_size(int argc, VALUE argv[], VALUE self) | ||||||
| VALUE | VALUE | ||||||
| rb_dlptr_s_to_ptr(VALUE self, VALUE val) | rb_dlptr_s_to_ptr(VALUE self, VALUE val) | ||||||
| { | { | ||||||
|  |     VALUE ptr; | ||||||
|  | 
 | ||||||
|     if (rb_obj_is_kind_of(val, rb_cIO) == Qtrue){ |     if (rb_obj_is_kind_of(val, rb_cIO) == Qtrue){ | ||||||
| 	rb_io_t *fptr; | 	rb_io_t *fptr; | ||||||
| 	FILE *fp; | 	FILE *fp; | ||||||
| 	GetOpenFile(val, fptr); | 	GetOpenFile(val, fptr); | ||||||
| 	fp = rb_io_stdio_file(fptr); | 	fp = rb_io_stdio_file(fptr); | ||||||
| 	return rb_dlptr_new(fp, 0, NULL); | 	ptr = rb_dlptr_new(fp, 0, NULL); | ||||||
|     } |     } | ||||||
|     else if (rb_obj_is_kind_of(val, rb_cString) == Qtrue){ |     else if (rb_obj_is_kind_of(val, rb_cString) == Qtrue){ | ||||||
|         char *ptr = StringValuePtr(val); |         char *ptr = StringValuePtr(val); | ||||||
|         return rb_dlptr_new(ptr, RSTRING_LEN(val), NULL);  |         ptr = rb_dlptr_new(ptr, RSTRING_LEN(val), NULL);  | ||||||
|     } |     } | ||||||
|     else if (rb_respond_to(val, id_to_ptr)){ |     else if (rb_respond_to(val, id_to_ptr)){ | ||||||
| 	VALUE vptr = rb_funcall(val, id_to_ptr, 0); | 	VALUE vptr = rb_funcall(val, id_to_ptr, 0); | ||||||
| 	if (rb_obj_is_kind_of(vptr, rb_cDLCPtr)){ | 	if (rb_obj_is_kind_of(vptr, rb_cDLCPtr)){ | ||||||
| 	    return vptr; | 	    ptr = vptr; | ||||||
| 	} | 	} | ||||||
| 	else{ | 	else{ | ||||||
| 	    rb_raise(rb_eDLError, "to_ptr should return a CPtr object"); | 	    rb_raise(rb_eDLError, "to_ptr should return a CPtr object"); | ||||||
| 	} | 	} | ||||||
|     } |     } | ||||||
|     else{ |     else{ | ||||||
| 	return rb_dlptr_new(NUM2PTR(rb_Integer(val)), 0, NULL); | 	ptr = rb_dlptr_new(NUM2PTR(rb_Integer(val)), 0, NULL); | ||||||
|     } |     } | ||||||
|  |     OBJ_INFECT(ptr, val); | ||||||
|  |     return ptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
|  |  | ||||||
|  | @ -22,6 +22,7 @@ rb_dl_malloc(VALUE self, VALUE size) | ||||||
| { | { | ||||||
|     void *ptr; |     void *ptr; | ||||||
| 
 | 
 | ||||||
|  |     rb_secure(4); | ||||||
|     ptr = (void*)ruby_xmalloc(NUM2INT(size)); |     ptr = (void*)ruby_xmalloc(NUM2INT(size)); | ||||||
|     return PTR2NUM(ptr); |     return PTR2NUM(ptr); | ||||||
| } | } | ||||||
|  | @ -31,6 +32,7 @@ rb_dl_realloc(VALUE self, VALUE addr, VALUE size) | ||||||
| { | { | ||||||
|     void *ptr = NUM2PTR(addr); |     void *ptr = NUM2PTR(addr); | ||||||
| 
 | 
 | ||||||
|  |     rb_secure(4); | ||||||
|     ptr = (void*)ruby_xrealloc(ptr, NUM2INT(size)); |     ptr = (void*)ruby_xrealloc(ptr, NUM2INT(size)); | ||||||
|     return PTR2NUM(ptr); |     return PTR2NUM(ptr); | ||||||
| } | } | ||||||
|  | @ -39,6 +41,8 @@ VALUE | ||||||
| rb_dl_free(VALUE self, VALUE addr) | rb_dl_free(VALUE self, VALUE addr) | ||||||
| { | { | ||||||
|     void *ptr = NUM2PTR(addr); |     void *ptr = NUM2PTR(addr); | ||||||
|  | 
 | ||||||
|  |     rb_secure(4); | ||||||
|     ruby_xfree(ptr); |     ruby_xfree(ptr); | ||||||
|     return Qnil; |     return Qnil; | ||||||
| } | } | ||||||
|  | @ -46,6 +50,7 @@ rb_dl_free(VALUE self, VALUE addr) | ||||||
| VALUE | VALUE | ||||||
| rb_dl_ptr2value(VALUE self, VALUE addr) | rb_dl_ptr2value(VALUE self, VALUE addr) | ||||||
| { | { | ||||||
|  |     rb_secure(4); | ||||||
|     return (VALUE)NUM2PTR(addr); |     return (VALUE)NUM2PTR(addr); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 matz
						matz