From 28013eb5546a980d1e77034cda206e299a1812f0 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 18 Dec 2015 13:23:40 -0800 Subject: Generate gemspec with a template --- templates/grpc.gemspec.template | 58 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 templates/grpc.gemspec.template (limited to 'templates/grpc.gemspec.template') diff --git a/templates/grpc.gemspec.template b/templates/grpc.gemspec.template new file mode 100644 index 0000000000..5c220052e7 --- /dev/null +++ b/templates/grpc.gemspec.template @@ -0,0 +1,58 @@ +%YAML 1.2 +--- | + # -*- ruby -*- + # encoding: utf-8 + $LOAD_PATH.push File.expand_path('../src/ruby/lib', __FILE__) + require 'grpc/version' + + Gem::Specification.new do |s| + s.name = 'grpc' + s.version = GRPC::VERSION + s.authors = ['gRPC Authors'] + s.email = 'temiola@google.com' + s.homepage = 'https://github.com/google/grpc/tree/master/src/ruby' + s.summary = 'GRPC system in Ruby' + s.description = 'Send RPCs from Ruby using GRPC' + s.license = 'BSD-3-Clause' + + s.required_ruby_version = '>= 2.0.0' + s.requirements << 'libgrpc ~> 0.11.0 needs to be installed' + + s.files = %w( Rakefile Makefile ) + s.files += %w( etc/roots.pem ) + s.files += Dir.glob('src/ruby/bin/**/*') + s.files += Dir.glob('src/ruby/ext/**/*') + s.files += Dir.glob('src/ruby/lib/**/*') + s.files += Dir.glob('src/ruby/pb/**/*') + s.files += Dir.glob('include/grpc/**/*') + s.test_files = Dir.glob('src/ruby/spec/**/*') + s.bindir = 'src/ruby/bin' + ${'%'}w(math noproto).each do |b| + s.executables += ["#{b}_client.rb", "#{b}_server.rb"] + end + s.executables += %w(grpc_ruby_interop_client grpc_ruby_interop_server) + s.require_paths = %w( src/ruby/bin src/ruby/lib src/ruby/pb ) + s.platform = Gem::Platform::RUBY + + s.add_dependency 'google-protobuf', '~> 3.0.0alpha.1.1' + s.add_dependency 'googleauth', '~> 0.4' + + s.add_development_dependency 'bundler', '~> 1.9' + s.add_development_dependency 'logging', '~> 2.0' + s.add_development_dependency 'simplecov', '~> 0.9' + s.add_development_dependency 'rake', '~> 10.4' + s.add_development_dependency 'rake-compiler', '~> 0.9' + s.add_development_dependency 'rspec', '~> 3.2' + s.add_development_dependency 'rubocop', '~> 0.30.0' + s.add_development_dependency 'signet', '~>0.6.0' + + s.extensions = %w(src/ruby/ext/grpc/extconf.rb) + + % for lib in libs: + % if lib.name in ('gpr', 'grpc'): + % for file in lib.public_headers + lib.headers + lib.src: + s.files += %w( ${file} ) + % endfor + % endif + % endfor + end -- cgit v1.2.3 From 56fada5dfede3a7b1bc63a0da36dc7e509fd36dd Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 6 Jan 2016 14:40:38 -0800 Subject: Make the Ruby extension throw an error when passed invalid metadata --- src/ruby/ext/grpc/rb_call.c | 40 +++++++++++++++++++++++++++++++--------- templates/grpc.gemspec.template | 2 +- 2 files changed, 32 insertions(+), 10 deletions(-) (limited to 'templates/grpc.gemspec.template') diff --git a/src/ruby/ext/grpc/rb_call.c b/src/ruby/ext/grpc/rb_call.c index cbea76c3bf..43adafb73f 100644 --- a/src/ruby/ext/grpc/rb_call.c +++ b/src/ruby/ext/grpc/rb_call.c @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -310,15 +310,20 @@ static int grpc_rb_md_ary_fill_hash_cb(VALUE key, VALUE val, VALUE md_ary_obj) { grpc_metadata_array *md_ary = NULL; long array_length; long i; - char *key_str; + size_t key_len; + char *value_str; + size_t value_len; + if (TYPE(key) == T_SYMBOL) { key_str = (char *)rb_id2name(SYM2ID(key)); + key_len = strlen(key_str); } else { /* StringValueCStr does all other type exclusions for us */ key_str = StringValueCStr(key); + key_len = RSTRING_LEN(key); } - if (!grpc_header_key_is_legal(key_str)) { + if (!grpc_header_key_is_legal(key_str, key_len)) { rb_raise(rb_eArgError, "'%s' is an invalid header key, must match [a-z0-9-_.]+", key_str); @@ -330,19 +335,36 @@ static int grpc_rb_md_ary_fill_hash_cb(VALUE key, VALUE val, VALUE md_ary_obj) { &grpc_rb_md_ary_data_type, md_ary); if (TYPE(val) == T_ARRAY) { - /* If the value is an array, add capacity for each value in the array */ array_length = RARRAY_LEN(val); + /* If the value is an array, add capacity for each value in the array */ for (i = 0; i < array_length; i++) { + value_str = RSTRING_PTR(rb_ary_entry(val, i)); + value_len = RSTRING_LEN(rb_ary_entry(val, i)); + if (!grpc_is_binary_header(key_str, key_len) && + !grpc_header_nonbin_value_is_legal(value_str, value_len)) { + // The value has invalid characters + rb_raise(rb_eArgError, + "Header value '%s' has invalid characters", value_str); + return ST_STOP; + } md_ary->metadata[md_ary->count].key = key_str; - md_ary->metadata[md_ary->count].value = RSTRING_PTR(rb_ary_entry(val, i)); - md_ary->metadata[md_ary->count].value_length = - RSTRING_LEN(rb_ary_entry(val, i)); + md_ary->metadata[md_ary->count].value = value_str; + md_ary->metadata[md_ary->count].value_length = value_len; md_ary->count += 1; } } else { + value_str = RSTRING_PTR(val); + value_len = RSTRING_LEN(val); + if (!grpc_is_binary_header(key_str, key_len) && + !grpc_header_nonbin_value_is_legal(value_str, value_len)) { + // The value has invalid characters + rb_raise(rb_eArgError, + "Header value '%s' has invalid characters", value_str); + return ST_STOP; + } md_ary->metadata[md_ary->count].key = key_str; - md_ary->metadata[md_ary->count].value = RSTRING_PTR(val); - md_ary->metadata[md_ary->count].value_length = RSTRING_LEN(val); + md_ary->metadata[md_ary->count].value = value_str; + md_ary->metadata[md_ary->count].value_length = value_len; md_ary->count += 1; } diff --git a/templates/grpc.gemspec.template b/templates/grpc.gemspec.template index 5c220052e7..8839b9be55 100644 --- a/templates/grpc.gemspec.template +++ b/templates/grpc.gemspec.template @@ -35,7 +35,7 @@ s.platform = Gem::Platform::RUBY s.add_dependency 'google-protobuf', '~> 3.0.0alpha.1.1' - s.add_dependency 'googleauth', '~> 0.4' + s.add_dependency 'googleauth', '~> 0.5.1' s.add_development_dependency 'bundler', '~> 1.9' s.add_development_dependency 'logging', '~> 2.0' -- cgit v1.2.3 From 24e826ec5642a4bec8bcdc0fa554ceff9df6a942 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 6 Jan 2016 16:27:58 -0800 Subject: Updated dependencies, fixed a couple of tests --- grpc.gemspec | 2 +- src/ruby/pb/test/client.rb | 7 ------- src/ruby/spec/pb/health/checker_spec.rb | 9 ++++----- templates/grpc.gemspec.template | 2 +- 4 files changed, 6 insertions(+), 14 deletions(-) (limited to 'templates/grpc.gemspec.template') diff --git a/grpc.gemspec b/grpc.gemspec index f1561d61ec..bf4435a9d7 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -42,7 +42,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'rake-compiler', '~> 0.9' s.add_development_dependency 'rspec', '~> 3.2' s.add_development_dependency 'rubocop', '~> 0.30.0' - s.add_development_dependency 'signet', '~>0.6.0' + s.add_development_dependency 'signet', '~>0.7.0' s.extensions = %w(src/ruby/ext/grpc/extconf.rb) diff --git a/src/ruby/pb/test/client.rb b/src/ruby/pb/test/client.rb index 94bfff1260..8dbfed4b29 100755 --- a/src/ruby/pb/test/client.rb +++ b/src/ruby/pb/test/client.rb @@ -56,8 +56,6 @@ require 'test/proto/empty' require 'test/proto/messages' require 'test/proto/test_services' -require 'signet/ssl_config' - AUTH_ENV = Google::Auth::CredentialsLoader::ENV_VAR # RubyLogger defines a logger for gRPC based on the standard ruby logger. @@ -268,11 +266,6 @@ class NamedTests auth_creds = Google::Auth.get_application_default(@args.oauth_scope) kw = auth_creds.updater_proc.call({}) - # TODO(jtattermusch): downcase the metadata keys here to make sure - # they are not rejected by C core. This is a hotfix that should - # be addressed by introducing auto-downcasing logic. - kw = Hash[ kw.each_pair.map { |k, v| [k.downcase, v] }] - resp = perform_large_unary(fill_username: true, fill_oauth_scope: true, **kw) diff --git a/src/ruby/spec/pb/health/checker_spec.rb b/src/ruby/spec/pb/health/checker_spec.rb index 794c5922fa..10d3a0705a 100644 --- a/src/ruby/spec/pb/health/checker_spec.rb +++ b/src/ruby/spec/pb/health/checker_spec.rb @@ -47,13 +47,12 @@ describe 'Health protobuf code generation' do end it 'should have the same content as created by code generation' do - root_dir = File.dirname( - File.dirname(File.dirname(File.dirname(__FILE__)))) - pb_dir = File.join(root_dir, 'pb') + root_dir = File.join(File.dirname(__FILE__), '..', '..', '..', '..') + pb_dir = File.join(root_dir, 'proto') # Get the current content - service_path = File.join(pb_dir, 'grpc', 'health', 'v1alpha', - 'health_services.rb') + service_path = File.join(root_dir, 'ruby', 'pb', 'grpc', + 'health', 'v1alpha', 'health_services.rb') want = nil File.open(service_path) { |f| want = f.read } diff --git a/templates/grpc.gemspec.template b/templates/grpc.gemspec.template index 8839b9be55..fdf87ee13f 100644 --- a/templates/grpc.gemspec.template +++ b/templates/grpc.gemspec.template @@ -44,7 +44,7 @@ s.add_development_dependency 'rake-compiler', '~> 0.9' s.add_development_dependency 'rspec', '~> 3.2' s.add_development_dependency 'rubocop', '~> 0.30.0' - s.add_development_dependency 'signet', '~>0.6.0' + s.add_development_dependency 'signet', '~>0.7.0' s.extensions = %w(src/ruby/ext/grpc/extconf.rb) -- cgit v1.2.3