This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
| name | age | message | |
|---|---|---|---|
| |
README | Fri Oct 24 16:14:00 -0700 2008 | |
| |
gem_builder.rb | Fri Oct 24 16:14:00 -0700 2008 | |
| |
gem_eval.rb | Sat Jan 24 13:26:59 -0800 2009 | |
| |
gem_eval_test.rb | Sat Jan 24 13:26:59 -0800 2009 | |
| |
git_mock | Fri Oct 31 23:33:06 -0700 2008 | |
| |
lazy_dir.rb | Sun Nov 02 16:25:30 -0800 2008 | |
| |
lazy_dir_test.rb | Sun Nov 02 16:25:30 -0800 2008 | |
| |
security.rb | Sat Jan 24 13:25:10 -0800 2009 | |
| |
security_test.rb | Fri Oct 31 05:30:23 -0700 2008 |
README
GitHub's Gem Evaler ------------------- Help make GitHub's gem build process more secure and robust! There are two components associated with this: * gem_builder.rb - Script that builds the gem * gem_eval.rb - Sandboxed Sinatra app that evals ruby gemspecs gem_builder.rb works as follows: 1) process() is called with a repository object and the path to the gemspec 2) If the spec is not in YAML, a request is made to the gem evaler (see below how it works) 3) A Gem::Specification object is created from the YAML gemspec and renamed with the user's login 4) The gem is built from the Gem::Specification using a monkey-patched version of RubyGems, so instead of grabbing the files from the filesystem, they're grabbed from the git repo gem_eval.rb works as follows: 1) Receives a request with the repo location and the ruby gemspec 2) Makes a shallow clone of the repo and chdir's to that repo 3) Evals the spec in a separate thread with a higher $SAFE level 4) Converts spec to YAML Goals ----- * Lower the $SAFE level to allow methods like Dir.glob, but without compromising security. * Never get another email from someone wondering why their gem didn't build







