idn-ruby 0.1.0 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGES +10 -0
- data/{README → README.md} +75 -46
- data/Rakefile +5 -15
- data/ext/idna.c +7 -6
- data/ext/punycode.c +7 -6
- data/ext/stringprep.c +5 -4
- metadata +31 -44
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f2570c09d706246f8a0ca7371e0dfa865024e5d2d4e0749109c02ae22e19f2e7
|
4
|
+
data.tar.gz: 31864ba33c666b02dc29f515602ba75b46d712246e06e4e9de9f29f8215c1071
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6e0c1bb1b1bdd659a7d2abef20362053758121195ec42aec3f6a646db8a20e876e36438666aac0a626ea3f70c8f3aaee4db6f478d844a674311d1f4f286987de
|
7
|
+
data.tar.gz: 42ebf3aed3ffb81249a01106a205b47d4488dbc16b312f2872dfff4deea857f54ea3788924a2bc6048abab6ae51808018179299367276cbbd7440c011805737e
|
data/CHANGES
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
Changes with IDN 0.1.2 (2021-06-10)
|
2
|
+
|
3
|
+
* add missing includes
|
4
|
+
* fix default encoding to use utf8
|
5
|
+
|
6
|
+
Changes with IDN 0.1.1 [yanked] (2021-06-09)
|
7
|
+
|
8
|
+
* Use xfree() only with memory allocated with xmalloc()/xrealloc(). Free
|
9
|
+
IDN-allocated memory with idn_free()
|
10
|
+
|
1
11
|
Changes with IDN 0.1.0 (2011-03-31)
|
2
12
|
|
3
13
|
* Fix compilation errors in ruby 1.9.2p0 (2010-08-18 revision 29036).
|
data/{README → README.md}
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
1
|
+
# LibIDN Ruby Bindings
|
2
2
|
|
3
|
-
Version 0.1.
|
3
|
+
Version 0.1.2
|
4
4
|
|
5
5
|
Ruby Bindings for the GNU LibIDN library, an implementation of the
|
6
6
|
Stringprep, Punycode and IDNA specifications defined by the IETF
|
@@ -14,113 +14,141 @@ to and from the ACE encoded form.
|
|
14
14
|
The latest version of the LibIDN Ruby Bindings project and its
|
15
15
|
documentation can always be found at
|
16
16
|
|
17
|
+
* https://github.com/deepfryed/idn-ruby
|
18
|
+
|
19
|
+
The original version can be found at,
|
20
|
+
|
17
21
|
* http://rubyforge.org/projects/idn
|
18
22
|
|
19
23
|
See the CHANGES file for detailed information on the changes of every
|
20
24
|
released version.
|
21
25
|
|
22
26
|
|
23
|
-
|
27
|
+
### Requirements
|
24
28
|
|
25
|
-
* GNU LibIDN
|
29
|
+
* [GNU LibIDN](http://www.gnu.org/software/libidn/) Library
|
26
30
|
|
27
|
-
* Rake
|
31
|
+
* [Rake](http://rubyforge.org/projects/rake) to run the tests and generate
|
28
32
|
the documentation
|
29
33
|
|
30
|
-
* RubyGems
|
34
|
+
* [RubyGems](http://docs.rubygems.org/) to produce a Gem package
|
31
35
|
|
32
36
|
* Ruby 1.9.1 or above. Patches welcome to make this work in 1.8.7
|
33
37
|
|
34
38
|
|
35
|
-
|
39
|
+
### Installation
|
40
|
+
|
41
|
+
You need GNU LibIDN installed first.
|
42
|
+
|
43
|
+
* On MacOS you can install it with `brew install libidn`
|
44
|
+
* On Debian flavours of Linux `apt-get install libidn11-dev`
|
36
45
|
|
37
46
|
You can easily install the LibIDN Ruby Bindings by following one of the
|
38
47
|
ways outlined below:
|
39
48
|
|
40
|
-
|
49
|
+
#### Automatic installation and management with RubyGems
|
41
50
|
|
42
51
|
Simply invoke the standard RubyGems commands (install, update, ...),
|
43
52
|
for example:
|
44
53
|
|
45
|
-
|
54
|
+
```bash
|
55
|
+
gem install --remote --test idn
|
56
|
+
```
|
46
57
|
|
47
58
|
or if the GNU LibIDN library can only be found in a non-standard location
|
48
59
|
|
49
|
-
|
50
|
-
|
60
|
+
```bash
|
61
|
+
gem install --remote --test idn -- \
|
62
|
+
--with-idn-dir=/path/to/non/standard/location
|
63
|
+
```
|
51
64
|
|
52
65
|
or in an even more complex setup
|
53
66
|
|
54
|
-
|
55
|
-
|
56
|
-
|
67
|
+
```bash
|
68
|
+
gem install --remote --test idn -- \
|
69
|
+
--with-idn-lib=/path/to/non/standard/location/lib \
|
70
|
+
--with-idn-include=/path/to/non/standard/location/include
|
71
|
+
```
|
57
72
|
|
58
|
-
|
73
|
+
#### Semi-automatic installation with Rake
|
59
74
|
|
60
75
|
If you are not able to or don't want to use RubyGems you can simply
|
61
76
|
download the latest release and install it with the help of Rake:
|
62
77
|
|
63
|
-
|
64
|
-
|
78
|
+
```bash
|
79
|
+
tar -xvzf idn-x.x.x.tar.gz
|
80
|
+
cd idn-x.x.x
|
65
81
|
|
66
|
-
|
82
|
+
rake install
|
83
|
+
```
|
67
84
|
|
68
85
|
or if the GNU LibIDN library can only be found in a non-standard location
|
69
86
|
|
70
|
-
|
87
|
+
```bash
|
88
|
+
rake install IDN_DIR=/path/to/non/standard/location
|
89
|
+
```
|
71
90
|
|
72
91
|
You can also run the tests or generate the documentation; just call Rake
|
73
92
|
with the '--tasks' parameter to get an overview of the available tasks:
|
74
93
|
|
75
|
-
|
94
|
+
```bash
|
95
|
+
rake --tasks
|
96
|
+
```
|
76
97
|
|
77
|
-
|
98
|
+
#### Manual installation with extconf.rb
|
78
99
|
|
79
100
|
If you are not able to or don't want to use even Rake then you will have to
|
80
101
|
do a little bit more work by yourself:
|
81
102
|
|
82
|
-
|
83
|
-
|
103
|
+
```bash
|
104
|
+
tar -xvzf idn-x.x.x.tar.gz
|
105
|
+
cd idn-x.x.x/ext
|
84
106
|
|
85
|
-
|
107
|
+
ruby extconf.rb
|
108
|
+
```
|
86
109
|
|
87
110
|
or if the GNU LibIDN library can only be found in a non-standard location
|
88
111
|
|
89
|
-
|
90
|
-
|
112
|
+
```bash
|
113
|
+
ruby extconf.rb \
|
114
|
+
--with-idn-dir=/path/to/non/standard/location
|
115
|
+
```
|
91
116
|
|
92
117
|
or in an even more complex setup
|
93
118
|
|
94
|
-
|
95
|
-
|
96
|
-
|
119
|
+
```bash
|
120
|
+
ruby extconf.rb \
|
121
|
+
--with-idn-lib=/path/to/non/standard/location/lib \
|
122
|
+
--with-idn-include=/path/to/non/standard/location/include
|
123
|
+
```
|
97
124
|
|
98
125
|
and finally
|
99
126
|
|
100
|
-
|
101
|
-
|
127
|
+
```bash
|
128
|
+
make
|
129
|
+
sudo make install
|
130
|
+
```
|
102
131
|
|
103
132
|
|
104
|
-
|
133
|
+
### Documentation
|
105
134
|
|
106
135
|
The complete documentation is available online at
|
107
136
|
|
108
|
-
* http://
|
109
|
-
|
110
|
-
See also the section on 'Semi-automatic installation with Rake' above for
|
111
|
-
some details on how to generate the documentation by yourself.
|
137
|
+
* http://rubydoc.info/github/deepfryed/idn-ruby/master/frames
|
112
138
|
|
113
|
-
|
139
|
+
#### Example usage
|
114
140
|
|
115
|
-
|
116
|
-
|
141
|
+
```ruby
|
142
|
+
require 'idn'
|
143
|
+
include IDN
|
117
144
|
|
118
|
-
|
119
|
-
|
120
|
-
|
145
|
+
puts 'Idna.toUnicode: ' + Idna.toUnicode('xn--rksmrgs-5wao1o.josefsson.org')
|
146
|
+
puts 'Punycode.decode: ' + Punycode.decode('egbpdaj6bu4bxfgehfvwxn')
|
147
|
+
puts 'Stringprep.with_profile: ' + Stringprep.with_profile('FOO', 'Nameprep')
|
148
|
+
```
|
121
149
|
|
122
150
|
|
123
|
-
|
151
|
+
### References
|
124
152
|
|
125
153
|
[GNU LibIDN]
|
126
154
|
An implementation of the Stringprep, Punycode and IDNA specifications
|
@@ -156,19 +184,20 @@ some details on how to generate the documentation by yourself.
|
|
156
184
|
* http://www.ietf.org/rfc/rfc3492.txt
|
157
185
|
|
158
186
|
|
159
|
-
|
187
|
+
### Questions, comments, patches?
|
160
188
|
|
161
189
|
If you have any questions, comments or feature requests or if you want
|
162
190
|
to submit a bug report or provide a patch, then have a look at the project
|
163
191
|
website at
|
164
192
|
|
165
|
-
*
|
193
|
+
* https://github.com/deepfryed/idn-ruby
|
194
|
+
* http://rubyforge.org/projects/idn (original)
|
166
195
|
|
167
196
|
For other information, feel free to ask on the idn-discuss at rubyforge.org
|
168
197
|
mailing list.
|
169
198
|
|
170
199
|
|
171
|
-
|
200
|
+
### Copyright & License
|
172
201
|
|
173
202
|
Copyright (c) 2005-2006 Erik Abele. 2011 Bharanee Rathna. All rights reserved.
|
174
203
|
|
data/Rakefile
CHANGED
@@ -2,8 +2,6 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'rake/clean'
|
4
4
|
require 'rake/testtask'
|
5
|
-
require 'rake/rdoctask'
|
6
|
-
require 'rake/extensiontask'
|
7
5
|
|
8
6
|
CLEAN << FileList[ 'ext/Makefile', 'ext/*.so', 'ext/*.o' ]
|
9
7
|
|
@@ -36,18 +34,10 @@ end
|
|
36
34
|
|
37
35
|
Jeweler::GemcutterTasks.new
|
38
36
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
Rake::RDocTask.new do |rdoc|
|
46
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
47
|
-
rdoc.rdoc_dir = 'rdoc'
|
48
|
-
rdoc.title = "idn-ruby #{version}"
|
49
|
-
rdoc.rdoc_files.include('README*')
|
50
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
37
|
+
task :compile do
|
38
|
+
Dir.chdir('ext') do
|
39
|
+
system('ruby extconf.rb && make') or raise 'failed to compile extension'
|
40
|
+
end
|
51
41
|
end
|
52
42
|
|
53
43
|
Rake::TestTask.new(:test) do |test|
|
@@ -56,5 +46,5 @@ Rake::TestTask.new(:test) do |test|
|
|
56
46
|
test.verbose = true
|
57
47
|
end
|
58
48
|
|
59
|
-
task :test => [ :compile
|
49
|
+
task :test => [ :compile ]
|
60
50
|
task :default => :test
|
data/ext/idna.c
CHANGED
@@ -23,6 +23,7 @@
|
|
23
23
|
#include <ruby.h>
|
24
24
|
#include <idna.h>
|
25
25
|
#include "idn.h"
|
26
|
+
#include "idn-free.h"
|
26
27
|
|
27
28
|
/*
|
28
29
|
* Document-class: IDN::Idna
|
@@ -88,13 +89,13 @@ static VALUE toASCII(int argc, VALUE argv[], VALUE self)
|
|
88
89
|
rc = idna_to_ascii_8z(RSTRING_PTR(str), &buf, flags);
|
89
90
|
|
90
91
|
if (rc != IDNA_SUCCESS) {
|
91
|
-
|
92
|
+
idn_free(buf);
|
92
93
|
rb_raise(eIdnaError, "%s (%d)", idna_strerror(rc), rc);
|
93
94
|
return Qnil;
|
94
95
|
}
|
95
96
|
|
96
|
-
retv =
|
97
|
-
|
97
|
+
retv = rb_utf8_str_new_cstr(buf);
|
98
|
+
idn_free(buf);
|
98
99
|
return retv;
|
99
100
|
}
|
100
101
|
|
@@ -128,13 +129,13 @@ static VALUE toUnicode(int argc, VALUE argv[], VALUE self)
|
|
128
129
|
rc = idna_to_unicode_8z8z(RSTRING_PTR(str), &buf, flags);
|
129
130
|
|
130
131
|
if (rc != IDNA_SUCCESS) {
|
131
|
-
|
132
|
+
idn_free(buf);
|
132
133
|
rb_raise(eIdnaError, "%s (%d)", idna_strerror(rc), rc);
|
133
134
|
return Qnil;
|
134
135
|
}
|
135
136
|
|
136
137
|
retv = rb_enc_str_new(buf, strlen(buf), rb_utf8_encoding());
|
137
|
-
|
138
|
+
idn_free(buf);
|
138
139
|
return retv;
|
139
140
|
}
|
140
141
|
|
@@ -153,7 +154,7 @@ void init_idna(void)
|
|
153
154
|
eIdnaError = rb_define_class_under(mIdna, "IdnaError", eIDNError);
|
154
155
|
|
155
156
|
rb_define_const(mIdna, "ACE_PREFIX",
|
156
|
-
|
157
|
+
rb_utf8_str_new_cstr(IDNA_ACE_PREFIX));
|
157
158
|
rb_define_const(mIdna, "ALLOW_UNASSIGNED",
|
158
159
|
INT2FIX(IDNA_ALLOW_UNASSIGNED));
|
159
160
|
rb_define_const(mIdna, "USE_STD3_ASCII_RULES",
|
data/ext/punycode.c
CHANGED
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <stringprep.h>
|
26
26
|
#include <punycode.h>
|
27
27
|
#include "idn.h"
|
28
|
+
#include "idn-free.h"
|
28
29
|
|
29
30
|
/*
|
30
31
|
* Document-class: IDN::Punycode
|
@@ -69,10 +70,10 @@ static VALUE encode(VALUE self, VALUE str)
|
|
69
70
|
ustr = stringprep_utf8_to_ucs4(RSTRING_PTR(str), RSTRING_LEN(str), &len);
|
70
71
|
|
71
72
|
while (1) {
|
72
|
-
buf =
|
73
|
+
buf = xrealloc(buf, buflen);
|
73
74
|
|
74
75
|
if (buf == NULL) {
|
75
|
-
|
76
|
+
idn_free(ustr);
|
76
77
|
rb_raise(rb_eNoMemError, "cannot allocate memory (%d bytes)", (uint32_t)buflen);
|
77
78
|
return Qnil;
|
78
79
|
}
|
@@ -84,7 +85,7 @@ static VALUE encode(VALUE self, VALUE str)
|
|
84
85
|
} else if (rc == PUNYCODE_BIG_OUTPUT) {
|
85
86
|
buflen += 0x100;
|
86
87
|
} else {
|
87
|
-
|
88
|
+
idn_free(ustr);
|
88
89
|
xfree(buf);
|
89
90
|
rb_raise(ePunycodeError, "%s (%d)", punycode_strerror(rc), rc);
|
90
91
|
return Qnil;
|
@@ -92,7 +93,7 @@ static VALUE encode(VALUE self, VALUE str)
|
|
92
93
|
}
|
93
94
|
|
94
95
|
retv = rb_str_new(buf, buflen);
|
95
|
-
|
96
|
+
idn_free(ustr);
|
96
97
|
xfree(buf);
|
97
98
|
return retv;
|
98
99
|
}
|
@@ -117,7 +118,7 @@ static VALUE decode(VALUE self, VALUE str)
|
|
117
118
|
str = rb_check_convert_type(str, T_STRING, "String", "to_s");
|
118
119
|
|
119
120
|
len = RSTRING_LEN(str);
|
120
|
-
ustr =
|
121
|
+
ustr = xmalloc(len * sizeof(punycode_uint));
|
121
122
|
|
122
123
|
if (ustr == NULL) {
|
123
124
|
rb_raise(rb_eNoMemError, "cannot allocate memory (%d bytes)", (uint32_t)len);
|
@@ -136,7 +137,7 @@ static VALUE decode(VALUE self, VALUE str)
|
|
136
137
|
buf = stringprep_ucs4_to_utf8(ustr, len, NULL, &len);
|
137
138
|
retv = rb_enc_str_new(buf, len, rb_utf8_encoding());
|
138
139
|
xfree(ustr);
|
139
|
-
|
140
|
+
idn_free(buf);
|
140
141
|
return retv;
|
141
142
|
}
|
142
143
|
|
data/ext/stringprep.c
CHANGED
@@ -24,6 +24,7 @@
|
|
24
24
|
#include <ruby.h>
|
25
25
|
#include <stringprep.h>
|
26
26
|
#include "idn.h"
|
27
|
+
#include "idn-free.h"
|
27
28
|
|
28
29
|
/*
|
29
30
|
* Document-class: IDN::Stringprep
|
@@ -71,8 +72,8 @@ static VALUE stringprep_internal(VALUE str, const char *profile)
|
|
71
72
|
return Qnil;
|
72
73
|
}
|
73
74
|
|
74
|
-
retv =
|
75
|
-
|
75
|
+
retv = rb_utf8_str_new_cstr(buf);
|
76
|
+
idn_free(buf);
|
76
77
|
return retv;
|
77
78
|
}
|
78
79
|
|
@@ -155,8 +156,8 @@ static VALUE nfkc_normalize(VALUE self, VALUE str)
|
|
155
156
|
str = rb_check_convert_type(str, T_STRING, "String", "to_s");
|
156
157
|
buf = stringprep_utf8_nfkc_normalize(RSTRING_PTR(str), RSTRING_LEN(str));
|
157
158
|
|
158
|
-
retv =
|
159
|
-
|
159
|
+
retv = rb_utf8_str_new_cstr(buf);
|
160
|
+
idn_free(buf);
|
160
161
|
return retv;
|
161
162
|
}
|
162
163
|
|
metadata
CHANGED
@@ -1,82 +1,69 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: idn-ruby
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
segments:
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
version: 0.1.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
10
5
|
platform: ruby
|
11
|
-
authors:
|
6
|
+
authors:
|
12
7
|
- Erik Abele
|
13
8
|
- Bharanee Rathna
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2011-05-31 00:00:00 +10:00
|
19
|
-
default_executable:
|
12
|
+
date: 2021-06-10 00:00:00.000000000 Z
|
20
13
|
dependencies: []
|
21
|
-
|
22
|
-
|
14
|
+
description: "\n Ruby Bindings for the GNU LibIDN library, an implementation of
|
15
|
+
the\n Stringprep, Punycode and IDNA specifications defined by the IETF\n Internationalized
|
16
|
+
Domain Names (IDN) working group.\n\n Included are the most important parts of
|
17
|
+
the Stringprep, Punycode\n and IDNA APIs like performing Stringprep processings,
|
18
|
+
encoding to\n and decoding from Punycode strings and converting entire domain
|
19
|
+
names\n to and from the ACE encoded form.\n "
|
23
20
|
email: deepfryed@gmail.com
|
24
21
|
executables: []
|
25
|
-
|
26
|
-
extensions:
|
22
|
+
extensions:
|
27
23
|
- ext/extconf.rb
|
28
|
-
extra_rdoc_files:
|
24
|
+
extra_rdoc_files:
|
29
25
|
- LICENSE
|
30
|
-
- README
|
31
|
-
files:
|
26
|
+
- README.md
|
27
|
+
files:
|
32
28
|
- CHANGES
|
33
29
|
- LICENSE
|
34
30
|
- NOTICE
|
35
|
-
- README
|
31
|
+
- README.md
|
36
32
|
- Rakefile
|
33
|
+
- ext/extconf.rb
|
37
34
|
- ext/idn.c
|
38
35
|
- ext/idn.h
|
39
36
|
- ext/idna.c
|
40
37
|
- ext/punycode.c
|
41
38
|
- ext/stringprep.c
|
42
|
-
- test/
|
39
|
+
- test/tc_Idna.rb
|
43
40
|
- test/tc_Punycode.rb
|
44
41
|
- test/tc_Stringprep.rb
|
45
|
-
- test/
|
46
|
-
- ext/extconf.rb
|
47
|
-
has_rdoc: true
|
42
|
+
- test/ts_IDN.rb
|
48
43
|
homepage: http://github.com/deepfryed/idn-ruby
|
49
44
|
licenses: []
|
50
|
-
|
45
|
+
metadata: {}
|
51
46
|
post_install_message:
|
52
47
|
rdoc_options: []
|
53
|
-
|
54
|
-
require_paths:
|
48
|
+
require_paths:
|
55
49
|
- lib
|
56
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
-
|
58
|
-
requirements:
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
59
52
|
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
67
57
|
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
|
70
|
-
- 0
|
71
|
-
version: "0"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
72
60
|
requirements: []
|
73
|
-
|
74
61
|
rubyforge_project:
|
75
|
-
rubygems_version:
|
62
|
+
rubygems_version: 2.7.6
|
76
63
|
signing_key:
|
77
64
|
specification_version: 3
|
78
65
|
summary: LibIDN Ruby Bindings.
|
79
|
-
test_files:
|
66
|
+
test_files:
|
80
67
|
- test/ts_IDN.rb
|
81
68
|
- test/tc_Punycode.rb
|
82
69
|
- test/tc_Stringprep.rb
|