cgi 0.2.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of cgi might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Rakefile +7 -3
- data/cgi.gemspec +3 -3
- data/ext/cgi/escape/depend +0 -15
- data/ext/cgi/escape/escape.c +12 -3
- data/lib/cgi/session/pstore.rb +2 -14
- data/lib/cgi/session.rb +43 -15
- data/lib/cgi/util.rb +9 -13
- data/lib/cgi.rb +1 -1
- data/rakelib/changelogs.rake +34 -0
- data/rakelib/epoch.rake +5 -0
- data/rakelib/sync_tool.rake +6 -0
- data/rakelib/version.rake +44 -0
- metadata +13 -12
- data/.github/workflows/test.yml +0 -24
- data/.gitignore +0 -12
- data/bin/console +0 -7
- data/bin/setup +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 670bbf0eb15455e6020b95c0ca39481adb722eb4bb60fc797761b66a8f19af81
|
4
|
+
data.tar.gz: 9e360fdb4a408678f9edda5d3a8035e0bf05e087c946593cbac13d21d22f1998
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4115408aa6f5dc3f17b638d9e7fc1ba0e10d4d84172910558c7d01e5ae2bf79fa198111dbd137d1602d2cb8299ae98961ae66f0aaf93bc0cf09912b3565bb664
|
7
|
+
data.tar.gz: 0e47613d0b6677a7062a87e6b07c7cefe3957d02fb74ed8c385ad0671146eafb0d26ec9efa29cf619b5e30a45b0c0b2bc259161a66b9dc3f778e5699806ad17a
|
data/Rakefile
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rake/testtask"
|
3
3
|
|
4
|
+
require 'rake/extensiontask'
|
5
|
+
extask = Rake::ExtensionTask.new("cgi/escape") do |x|
|
6
|
+
x.lib_dir.sub!(%r[(?=/|\z)], "/#{RUBY_VERSION}/#{x.platform}")
|
7
|
+
end
|
8
|
+
|
4
9
|
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << "lib/#{RUBY_VERSION}/#{extask.platform}"
|
5
11
|
t.libs << "test/lib"
|
6
12
|
t.ruby_opts << "-rhelper"
|
7
13
|
t.test_files = FileList['test/**/test_*.rb']
|
8
14
|
end
|
9
15
|
|
10
|
-
require 'rake/extensiontask'
|
11
|
-
Rake::ExtensionTask.new("cgi/escape")
|
12
|
-
|
13
16
|
task :default => :test
|
17
|
+
task :test => :compile
|
data/cgi.gemspec
CHANGED
@@ -23,9 +23,9 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.metadata["source_code_uri"] = spec.homepage
|
24
24
|
|
25
25
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
26
|
-
`git ls-files -z 2>/dev/null`.split("\x0").reject { |f| f.match(%r{
|
26
|
+
`git ls-files -z 2>/dev/null`.split("\x0").reject { |f| f.match(%r{\A(?:(?:test|spec|features)/|\.git)}) }
|
27
27
|
end
|
28
|
-
spec.
|
29
|
-
spec.executables =
|
28
|
+
spec.extensions = ["ext/cgi/escape/extconf.rb"]
|
29
|
+
spec.executables = []
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
end
|
data/ext/cgi/escape/depend
CHANGED
@@ -1,17 +1,2 @@
|
|
1
|
-
# AUTOGENERATED DEPENDENCIES START
|
2
1
|
escape.o: $(RUBY_EXTCONF_H)
|
3
|
-
escape.o: $(arch_hdrdir)/ruby/config.h
|
4
|
-
escape.o: $(hdrdir)/ruby.h
|
5
|
-
escape.o: $(hdrdir)/ruby/assert.h
|
6
|
-
escape.o: $(hdrdir)/ruby/backward.h
|
7
|
-
escape.o: $(hdrdir)/ruby/defines.h
|
8
|
-
escape.o: $(hdrdir)/ruby/encoding.h
|
9
|
-
escape.o: $(hdrdir)/ruby/intern.h
|
10
|
-
escape.o: $(hdrdir)/ruby/missing.h
|
11
|
-
escape.o: $(hdrdir)/ruby/onigmo.h
|
12
|
-
escape.o: $(hdrdir)/ruby/oniguruma.h
|
13
|
-
escape.o: $(hdrdir)/ruby/ruby.h
|
14
|
-
escape.o: $(hdrdir)/ruby/st.h
|
15
|
-
escape.o: $(hdrdir)/ruby/subst.h
|
16
2
|
escape.o: escape.c
|
17
|
-
# AUTOGENERATED DEPENDENCIES END
|
data/ext/cgi/escape/escape.c
CHANGED
@@ -32,12 +32,21 @@ preserve_original_state(VALUE orig, VALUE dest)
|
|
32
32
|
rb_enc_associate(dest, rb_enc_get(orig));
|
33
33
|
}
|
34
34
|
|
35
|
+
static inline long
|
36
|
+
escaped_length(VALUE str)
|
37
|
+
{
|
38
|
+
const long len = RSTRING_LEN(str);
|
39
|
+
if (len >= LONG_MAX / HTML_ESCAPE_MAX_LEN) {
|
40
|
+
ruby_malloc_size_overflow(len, HTML_ESCAPE_MAX_LEN);
|
41
|
+
}
|
42
|
+
return len * HTML_ESCAPE_MAX_LEN;
|
43
|
+
}
|
44
|
+
|
35
45
|
static VALUE
|
36
46
|
optimized_escape_html(VALUE str)
|
37
47
|
{
|
38
48
|
VALUE vbuf;
|
39
|
-
|
40
|
-
char *buf = *ALLOCV_N(escape_buf, vbuf, RSTRING_LEN(str));
|
49
|
+
char *buf = ALLOCV_N(char, vbuf, escaped_length(str));
|
41
50
|
const char *cstr = RSTRING_PTR(str);
|
42
51
|
const char *end = cstr + RSTRING_LEN(str);
|
43
52
|
|
@@ -389,7 +398,7 @@ cgiesc_unescape(int argc, VALUE *argv, VALUE self)
|
|
389
398
|
void
|
390
399
|
Init_escape(void)
|
391
400
|
{
|
392
|
-
#
|
401
|
+
#ifdef HAVE_RB_EXT_RACTOR_SAFE
|
393
402
|
rb_ext_ractor_safe(true);
|
394
403
|
#endif
|
395
404
|
|
data/lib/cgi/session/pstore.rb
CHANGED
@@ -44,20 +44,8 @@ class CGI
|
|
44
44
|
# This session's PStore file will be created if it does
|
45
45
|
# not exist, or opened if it does.
|
46
46
|
def initialize(session, option={})
|
47
|
-
|
48
|
-
|
49
|
-
id = session.session_id
|
50
|
-
require 'digest/md5'
|
51
|
-
md5 = Digest::MD5.hexdigest(id)[0,16]
|
52
|
-
path = dir+"/"+prefix+md5
|
53
|
-
if File::exist?(path)
|
54
|
-
@hash = nil
|
55
|
-
else
|
56
|
-
unless session.new_session
|
57
|
-
raise CGI::Session::NoSession, "uninitialized session"
|
58
|
-
end
|
59
|
-
@hash = {}
|
60
|
-
end
|
47
|
+
option = {'suffix'=>''}.update(option)
|
48
|
+
path, @hash = session.new_store_file(option)
|
61
49
|
@p = ::PStore.new(path)
|
62
50
|
@p.transaction do |p|
|
63
51
|
File.chmod(0600, p.path)
|
data/lib/cgi/session.rb
CHANGED
@@ -189,6 +189,47 @@ class CGI
|
|
189
189
|
end
|
190
190
|
private :create_new_id
|
191
191
|
|
192
|
+
|
193
|
+
# Create a new file to store the session data.
|
194
|
+
#
|
195
|
+
# This file will be created if it does not exist, or opened if it
|
196
|
+
# does.
|
197
|
+
#
|
198
|
+
# This path is generated under _tmpdir_ from _prefix_, the
|
199
|
+
# digested session id, and _suffix_.
|
200
|
+
#
|
201
|
+
# +option+ is a hash of options for the initializer. The
|
202
|
+
# following options are recognised:
|
203
|
+
#
|
204
|
+
# tmpdir:: the directory to use for storing the FileStore
|
205
|
+
# file. Defaults to Dir::tmpdir (generally "/tmp"
|
206
|
+
# on Unix systems).
|
207
|
+
# prefix:: the prefix to add to the session id when generating
|
208
|
+
# the filename for this session's FileStore file.
|
209
|
+
# Defaults to "cgi_sid_".
|
210
|
+
# suffix:: the prefix to add to the session id when generating
|
211
|
+
# the filename for this session's FileStore file.
|
212
|
+
# Defaults to the empty string.
|
213
|
+
def new_store_file(option={}) # :nodoc:
|
214
|
+
dir = option['tmpdir'] || Dir::tmpdir
|
215
|
+
prefix = option['prefix']
|
216
|
+
suffix = option['suffix']
|
217
|
+
require 'digest/md5'
|
218
|
+
md5 = Digest::MD5.hexdigest(session_id)[0,16]
|
219
|
+
path = dir+"/"
|
220
|
+
path << prefix if prefix
|
221
|
+
path << md5
|
222
|
+
path << suffix if suffix
|
223
|
+
if File::exist? path
|
224
|
+
hash = nil
|
225
|
+
elsif new_session
|
226
|
+
hash = {}
|
227
|
+
else
|
228
|
+
raise NoSession, "uninitialized session"
|
229
|
+
end
|
230
|
+
return path, hash
|
231
|
+
end
|
232
|
+
|
192
233
|
# Create a new CGI::Session object for +request+.
|
193
234
|
#
|
194
235
|
# +request+ is an instance of the +CGI+ class (see cgi.rb).
|
@@ -373,21 +414,8 @@ class CGI
|
|
373
414
|
# This session's FileStore file will be created if it does
|
374
415
|
# not exist, or opened if it does.
|
375
416
|
def initialize(session, option={})
|
376
|
-
|
377
|
-
|
378
|
-
suffix = option['suffix'] || ''
|
379
|
-
id = session.session_id
|
380
|
-
require 'digest/md5'
|
381
|
-
md5 = Digest::MD5.hexdigest(id)[0,16]
|
382
|
-
@path = dir+"/"+prefix+md5+suffix
|
383
|
-
if File::exist? @path
|
384
|
-
@hash = nil
|
385
|
-
else
|
386
|
-
unless session.new_session
|
387
|
-
raise CGI::Session::NoSession, "uninitialized session"
|
388
|
-
end
|
389
|
-
@hash = {}
|
390
|
-
end
|
417
|
+
option = {'prefix' => 'cgi_sid_'}.update(option)
|
418
|
+
@path, @hash = session.new_store_file(option)
|
391
419
|
end
|
392
420
|
|
393
421
|
# Restore session state from the session's FileStore file.
|
data/lib/cgi/util.rb
CHANGED
@@ -49,9 +49,12 @@ module CGI::Util
|
|
49
49
|
table = Hash[TABLE_FOR_ESCAPE_HTML__.map {|pair|pair.map {|s|s.encode(enc)}}]
|
50
50
|
string = string.gsub(/#{"['&\"<>]".encode(enc)}/, table)
|
51
51
|
string.encode!(origenc) if origenc
|
52
|
-
|
52
|
+
string
|
53
|
+
else
|
54
|
+
string = string.b
|
55
|
+
string.gsub!(/['&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
|
56
|
+
string.force_encoding(enc)
|
53
57
|
end
|
54
|
-
string.gsub(/['&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
|
55
58
|
end
|
56
59
|
|
57
60
|
begin
|
@@ -90,7 +93,8 @@ module CGI::Util
|
|
90
93
|
when Encoding::ISO_8859_1; 256
|
91
94
|
else 128
|
92
95
|
end
|
93
|
-
string.
|
96
|
+
string = string.b
|
97
|
+
string.gsub!(/&(apos|amp|quot|gt|lt|\#[0-9]+|\#[xX][0-9A-Fa-f]+);/) do
|
94
98
|
match = $1.dup
|
95
99
|
case match
|
96
100
|
when 'apos' then "'"
|
@@ -116,6 +120,7 @@ module CGI::Util
|
|
116
120
|
"&#{match};"
|
117
121
|
end
|
118
122
|
end
|
123
|
+
string.force_encoding enc
|
119
124
|
end
|
120
125
|
|
121
126
|
# Synonym for CGI.escapeHTML(str)
|
@@ -174,21 +179,12 @@ module CGI::Util
|
|
174
179
|
# Synonym for CGI.unescapeElement(str)
|
175
180
|
alias unescape_element unescapeElement
|
176
181
|
|
177
|
-
# Abbreviated day-of-week names specified by RFC 822
|
178
|
-
RFC822_DAYS = %w[ Sun Mon Tue Wed Thu Fri Sat ]
|
179
|
-
|
180
|
-
# Abbreviated month names specified by RFC 822
|
181
|
-
RFC822_MONTHS = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]
|
182
|
-
|
183
182
|
# Format a +Time+ object as a String using the format specified by RFC 1123.
|
184
183
|
#
|
185
184
|
# CGI.rfc1123_date(Time.now)
|
186
185
|
# # Sat, 01 Jan 2000 00:00:00 GMT
|
187
186
|
def rfc1123_date(time)
|
188
|
-
|
189
|
-
return format("%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT",
|
190
|
-
RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,
|
191
|
-
t.hour, t.min, t.sec)
|
187
|
+
time.getgm.strftime("%a, %d %b %Y %T GMT")
|
192
188
|
end
|
193
189
|
|
194
190
|
# Prettify (indent) an HTML string.
|
data/lib/cgi.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
task "build" => "changelogs"
|
2
|
+
|
3
|
+
changelog = proc do |output, ver = nil, prev = nil|
|
4
|
+
ver &&= Gem::Version.new(ver)
|
5
|
+
range = [[prev], [ver, "HEAD"]].map {|ver, branch| ver ? "v#{ver.to_s}" : branch}.compact.join("..")
|
6
|
+
IO.popen(%W[git log --format=fuller --topo-order --no-merges #{range}]) do |log|
|
7
|
+
line = log.gets
|
8
|
+
FileUtils.mkpath(File.dirname(output))
|
9
|
+
File.open(output, "wb") do |f|
|
10
|
+
f.print "-*- coding: utf-8 -*-\n\n", line
|
11
|
+
log.each_line do |line|
|
12
|
+
line.sub!(/^(?!:)(?:Author|Commit)?(?:Date)?: /, ' \&')
|
13
|
+
line.sub!(/ +$/, '')
|
14
|
+
f.print(line)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
tags = IO.popen(%w[git tag -l v[0-9]*]).grep(/v(.*)/) {$1}
|
21
|
+
tags.sort_by! {|tag| tag.scan(/\d+/).map(&:to_i)}
|
22
|
+
tags.inject(nil) do |prev, tag|
|
23
|
+
task("logs/ChangeLog-#{tag}") {|t| changelog[t.name, tag, prev]}
|
24
|
+
tag
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Make ChangeLog"
|
28
|
+
task "ChangeLog", [:ver, :prev] do |t, ver: nil, prev: tags.last|
|
29
|
+
changelog[t.name, ver, prev]
|
30
|
+
end
|
31
|
+
|
32
|
+
changelogs = ["ChangeLog", *tags.map {|tag| "logs/ChangeLog-#{tag}"}]
|
33
|
+
task "changelogs" => changelogs
|
34
|
+
CLOBBER.concat(changelogs) << "logs"
|
data/rakelib/epoch.rake
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
class << (helper = Bundler::GemHelper.instance)
|
2
|
+
def update_gemspec
|
3
|
+
path = gemspec.loaded_from
|
4
|
+
File.open(path, "r+b") do |f|
|
5
|
+
d = f.read
|
6
|
+
if d.sub!(/^(_VERSION\s*=\s*)".*"/) {$1 + gemspec.version.to_s.dump}
|
7
|
+
f.rewind
|
8
|
+
f.truncate(0)
|
9
|
+
f.print(d)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def commit_bump
|
15
|
+
sh(%W[git commit -m bump\ up\ to\ #{gemspec.version}
|
16
|
+
#{gemspec.loaded_from}])
|
17
|
+
end
|
18
|
+
|
19
|
+
def version=(v)
|
20
|
+
gemspec.version = v
|
21
|
+
update_gemspec
|
22
|
+
commit_bump
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
major, minor, teeny = helper.gemspec.version.segments
|
27
|
+
|
28
|
+
task "bump:teeny" do
|
29
|
+
helper.version = Gem::Version.new("#{major}.#{minor}.#{teeny+1}")
|
30
|
+
end
|
31
|
+
|
32
|
+
task "bump:minor" do
|
33
|
+
helper.version = Gem::Version.new("#{major}.#{minor+1}.0")
|
34
|
+
end
|
35
|
+
|
36
|
+
task "bump:major" do
|
37
|
+
helper.version = Gem::Version.new("#{major+1}.0.0")
|
38
|
+
end
|
39
|
+
|
40
|
+
task "bump" => "bump:teeny"
|
41
|
+
|
42
|
+
task "tag" do
|
43
|
+
helper.__send__(:tag_version)
|
44
|
+
end
|
metadata
CHANGED
@@ -1,30 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cgi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yukihiro Matsumoto
|
8
|
-
autorequire:
|
9
|
-
bindir:
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Support for the Common Gateway Interface protocol.
|
14
14
|
email:
|
15
15
|
- matz@ruby-lang.org
|
16
16
|
executables: []
|
17
|
-
extensions:
|
17
|
+
extensions:
|
18
|
+
- ext/cgi/escape/extconf.rb
|
18
19
|
extra_rdoc_files: []
|
19
20
|
files:
|
20
|
-
- ".github/workflows/test.yml"
|
21
|
-
- ".gitignore"
|
22
21
|
- Gemfile
|
23
22
|
- LICENSE.txt
|
24
23
|
- README.md
|
25
24
|
- Rakefile
|
26
|
-
- bin/console
|
27
|
-
- bin/setup
|
28
25
|
- cgi.gemspec
|
29
26
|
- ext/cgi/escape/depend
|
30
27
|
- ext/cgi/escape/escape.c
|
@@ -36,6 +33,10 @@ files:
|
|
36
33
|
- lib/cgi/session.rb
|
37
34
|
- lib/cgi/session/pstore.rb
|
38
35
|
- lib/cgi/util.rb
|
36
|
+
- rakelib/changelogs.rake
|
37
|
+
- rakelib/epoch.rake
|
38
|
+
- rakelib/sync_tool.rake
|
39
|
+
- rakelib/version.rake
|
39
40
|
homepage: https://github.com/ruby/cgi
|
40
41
|
licenses:
|
41
42
|
- Ruby
|
@@ -43,7 +44,7 @@ licenses:
|
|
43
44
|
metadata:
|
44
45
|
homepage_uri: https://github.com/ruby/cgi
|
45
46
|
source_code_uri: https://github.com/ruby/cgi
|
46
|
-
post_install_message:
|
47
|
+
post_install_message:
|
47
48
|
rdoc_options: []
|
48
49
|
require_paths:
|
49
50
|
- lib
|
@@ -58,8 +59,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
58
59
|
- !ruby/object:Gem::Version
|
59
60
|
version: '0'
|
60
61
|
requirements: []
|
61
|
-
rubygems_version: 3.
|
62
|
-
signing_key:
|
62
|
+
rubygems_version: 3.4.0.dev
|
63
|
+
signing_key:
|
63
64
|
specification_version: 4
|
64
65
|
summary: Support for the Common Gateway Interface protocol.
|
65
66
|
test_files: []
|
data/.github/workflows/test.yml
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
name: test
|
2
|
-
|
3
|
-
on: [push, pull_request]
|
4
|
-
|
5
|
-
jobs:
|
6
|
-
build:
|
7
|
-
name: build (${{ matrix.ruby }} / ${{ matrix.os }})
|
8
|
-
strategy:
|
9
|
-
matrix:
|
10
|
-
ruby: [ 2.7, 2.6, 2.5, head ]
|
11
|
-
os: [ ubuntu-latest, macos-latest ]
|
12
|
-
runs-on: ${{ matrix.os }}
|
13
|
-
steps:
|
14
|
-
- uses: actions/checkout@master
|
15
|
-
- name: Set up Ruby
|
16
|
-
uses: ruby/setup-ruby@v1
|
17
|
-
with:
|
18
|
-
ruby-version: ${{ matrix.ruby }}
|
19
|
-
- name: Install dependencies
|
20
|
-
run: |
|
21
|
-
gem install bundler --no-document
|
22
|
-
bundle install
|
23
|
-
- name: Run test
|
24
|
-
run: rake test
|
data/.gitignore
DELETED
data/bin/console
DELETED