[#10157] Re: Including classes — Pit Capitain <pit@...>
Ola Bini schrieb:
[#10167] SVN revision corresponding to 1.8.5_p12? — Charles Oliver Nutter <charles.nutter@...>
Simple question: what SVN revision corresponds to the 1.8.5_p12 release?
[#10185] Ruby 1.9: Why the change to the return values of #instance_variables? — "Austin Ziegler" <halostatue@...>
I have been preparing a release of Transaction::Simple 1.4 and want to
[#10193] String.ord — David Flanagan <david@...>
Hi,
Hi,
Yukihiro Matsumoto wrote:
David Flanagan wrote:
Daniel Berger wrote:
On 2/6/07, David Flanagan <david@davidflanagan.com> wrote:
Nikolai Weibull wrote:
On 2/6/07, David Flanagan <david@davidflanagan.com> wrote:
Nikolai Weibull wrote:
Quoting david@davidflanagan.com, on Wed, Feb 07, 2007 at 09:10:52AM +0900:
On 2/7/07, Sam Roberts <sroberts@uniserve.com> wrote:
Nikolai Weibull wrote:
Hi,
On 2/6/07, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
Hi --
On 2/6/07, dblack@wobblini.net <dblack@wobblini.net> wrote:
[#10230] Test::Unit::AutoRunner#parse_args bug, attributable to optparse documentation. — Mauricio Fernandez <mfp@...>
[#10254] uninitialized variable in function rb_syswait() — <noreply@...>
Bugs item #8538, was opened at 2007-02-09 17:25
On Sat, Feb 10, 2007 at 02:25:43AM +0900, noreply@rubyforge.org wrote:
[#10255] String:upto loops forever if argument is modified inside block — <noreply@...>
Bugs item #8539, was opened at 2007-02-09 17:27
[#10257] coredump when invoking Kernel:syscall — <noreply@...>
Bugs item #8541, was opened at 2007-02-09 17:31
On Sat, Feb 10, 2007 at 02:31:48AM +0900, noreply@rubyforge.org wrote:
[#10259] Segmentation fault: Ruby 1.8.5 Under VC++ express 2005 — "z wen" <zhimin.wen@...>
Hi
Hell,
Hello,
On 2/10/07, Masaki Suketa <masaki.suketa@nifty.ne.jp> wrote:
[#10276] fastthread now default in ruby_1_8 — "Akinori MUSHA" <knu@...>
Hi,
[#10284] Can't seem to run tests? — "Farrel Lifson" <farrel.lifson@...>
Hi there,
[#10288] Socket library should support abstract unix sockets — <noreply@...>
Bugs item #8597, was opened at 2007-02-13 16:10
On Wed, Feb 14, 2007 at 12:10:37AM +0900, noreply@rubyforge.org wrote:
Hi,
On Wed, Feb 14, 2007 at 08:38:50AM +0900, Yukihiro Matsumoto wrote:
On Wed, Feb 14, 2007 at 12:10:37AM +0900, noreply@rubyforge.org wrote:
[#10290] URI::Generic#userinfo — "Jonas Pfenniger" <zimbatm@...>
Hello,
Those are not errors. Username and password are not allowed in HTTP
[#10321] File.basename fails on Windows root paths — <noreply@...>
Bugs item #8676, was opened at 2007-02-15 10:09
Hi,
On 5/12/07, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
On 5/12/07, Austin Ziegler <halostatue@gmail.com> wrote:
Nikolai Weibull wrote:
[#10323] Trouble with xmlrpc — James Edward Gray II <james@...>
Some of the Ruby code used by TextMate makes use of xmlrpc/
> -----Original Message-----
On Feb 15, 2007, at 1:29 PM, Berger, Daniel wrote:
On Feb 15, 2007, at 1:33 PM, James Edward Gray II wrote:
On Feb 16, 2007, at 7:49 AM, James Edward Gray II wrote:
At Tue, 20 Feb 2007 22:33:08 +0900,
On Feb 20, 2007, at 7:50 AM, Akinori MUSHA wrote:
While I am complaining about xmlrpc, we have another issue. It's
James Edward Gray II wrote:
On Feb 16, 2007, at 12:08 PM, Alex Young wrote:
James Edward Gray II wrote:
On Feb 16, 2007, at 4:27 PM, Alex Young wrote:
On Feb 16, 2007, at 5:08 PM, James Edward Gray II wrote:
James Edward Gray II wrote:
[#10334] make Test::Unit output more Emacs friendly format — Kouhei Sutou <kou@...>
Hi,
[#10341] matz/knu: Requesting committer privileges to add Win32 NTLM authentication to net/http — "Justin Bailey" <jgbailey@...>
Matz, Mr. Musha, and All,
[#10357] Ruby 1.8.6 preview1 has been released — "Akinori MUSHA" <knu@...>
Hi,
[#10372] Stateful I/O interface — "Tony Arcieri" <tony@...>
Has anyone ever suggested adding a stateful I/O multiplexing interface which
[#10387] vendor_ruby support — Marcus Rueckert <mrueckert@...>
Hi,
[#10397] Ruby 1.8.5 not installing a working digest.rb on MacOSX — "Ryan Waldron" <ryan.waldron@...>
While trying to install a Rails app on my Mac (10.4 Tiger), I ran into
[#10413] Support for multiple-files breakpoint-management with Emacs — Martin Nordholts <enselic@...>
Hello!
Sorry for misformatting. This time it should be OK (enclosed in
It appears as if the debugger doesn't support 'b file.rb:25', but it
[#10414] Ruby 1.8.6 preview2 has been released — "Akinori MUSHA" <knu@...>
Hi,
On 2/24/07, Akinori MUSHA <knu@idaemons.org> wrote:
[#10420] Test::Unit shows result even if interrupted — Kouhei Sutou <kou@...>
Hi,
Kouhei Sutou <kou@cozmixng.org> writes:
[#10437] MIME decoding confused by non-MIME characters — Brian Candler <B.Candler@...>
Could someone who has bleeding-edge Ruby installed please test the
[#10442] Latest Update to RHG — Charles Thornton <ceo@...>
I am releasing the lastest version of the Ruby Hacker's Guide.
Hi,
[#10445] PATCH: Emacs support for 'ruby-debug' (rdebug) : rdebug.el — Martin Nordholts <enselic@...>
Hello,
This is a patch against trunk that also changes ./misc/README. The patch
[#10446] Potential RCR?: Array#join with block — "Farrel Lifson" <farrel.lifson@...>
Does anyone think Array#join with a block is a potential RCR?
Re: [ ruby-Bugs-8597 ] Socket library should support abstract unix sockets
For Socket, this allows abstract sockets by allowing first character to
be a NUL. I didn't do it for UNIXClient and UNIXServer, I don't know
what to do about code like:
init_sock(sock, fd);
GetOpenFile(sock, fptr);
if (server) {
fptr->path = strdup(RSTRING(path)->ptr);
}
The "paths shall not contain nul" is fairly deep here. Maybe its OK,
there is no need to use those helper classes.
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c (revision 11744)
+++ ext/socket/socket.c (working copy)
@@ -2193,7 +2193,7 @@
GetOpenFile(sock, fptr);
if (getpeername(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0)
- rb_sys_fail("getsockname(2)");
+ rb_sys_fail("getpeername(2)");
return unixaddr(&addr, len);
}
#endif
@@ -3769,27 +3769,43 @@
MEMZERO(&sockaddr, struct sockaddr_un, 1);
sockaddr.sun_family = AF_UNIX;
- sun_path = StringValueCStr(path);
- if (sizeof(sockaddr.sun_path) <= strlen(sun_path)) {
+ sun_path = StringValuePtr(path);
+ if(RSTRING(path)->len > 1 && !sun_path[0] && sun_path[1]) {
+ /* special checking for case of a path with a single leading NUL,
+ * a linux abstract path */
+ if(RSTRING(path)->len - 1 != strlen(sun_path + 1))
+ rb_raise(rb_eArgError, "string contains null byte");
+ } else {
+ sun_path = StringValueCStr(path);
+ }
+
+ if (sizeof(sockaddr.sun_path) <= RSTRING(path)->len) {
rb_raise(rb_eArgError, "too long unix socket path (max: %dbytes)",
- (int)sizeof(sockaddr.sun_path)-1);
+ (int)sizeof(sockaddr.sun_path) - 1);
}
- strncpy(sockaddr.sun_path, sun_path, sizeof(sockaddr.sun_path)-1);
+ memcpy(sockaddr.sun_path, sun_path, RSTRING(path)->len);
addr = rb_str_new((char*)&sockaddr, sizeof(sockaddr));
OBJ_INFECT(addr, path);
return addr;
}
+#define SA_UN_MIN_LENGTH ((long) (((struct sockaddr_un *) 0)->sun_path))
+
static VALUE
sock_s_unpack_sockaddr_un(self, addr)
VALUE self, addr;
{
struct sockaddr_un * sockaddr;
char *sun_path;
+ long sun_path_len;
VALUE path;
sockaddr = (struct sockaddr_un*)StringValuePtr(addr);
+ if(RSTRING(addr)->len < SA_UN_MIN_LENGTH) {
+ rb_raise(rb_eTypeError, "too short sockaddr_un - %ld shorter than %d",
+ RSTRING(addr)->len, SA_UN_MIN_LENGTH);
+ }
if (((struct sockaddr *)sockaddr)->sa_family != AF_UNIX) {
rb_raise(rb_eArgError, "not an AF_UNIX sockaddr");
}
@@ -3797,13 +3813,12 @@
rb_raise(rb_eTypeError, "too long sockaddr_un - %ld longer than %d",
RSTRING(addr)->len, sizeof(struct sockaddr_un));
}
- sun_path = unixpath(sockaddr, RSTRING(addr)->len);
- if (sizeof(struct sockaddr_un) == RSTRING(addr)->len &&
- sun_path == sockaddr->sun_path &&
- sun_path + strlen(sun_path) == RSTRING(addr)->ptr + RSTRING(addr)->len) {
- rb_raise(rb_eArgError, "sockaddr_un.sun_path not NUL terminated");
- }
- path = rb_str_new2(sun_path);
+ sun_path = sockaddr->sun_path;
+ sun_path_len = RSTRING(addr)->len - SA_UN_MIN_LENGTH;
+ /* Don't include trailing nul in path, but allow a starting nul. */
+ while(sun_path_len > 0 && sun_path[sun_path_len-1] == '\0')
+ sun_path_len--;
+ path = rb_str_new(sun_path, sun_path_len);
OBJ_INFECT(path, addr);
return path;
}
Index: test/socket/test_unix.rb
===================================================================
--- test/socket/test_unix.rb (revision 11744)
+++ test/socket/test_unix.rb (working copy)
@@ -118,9 +118,23 @@
def test_nul
assert_raise(ArgumentError) { Socket.sockaddr_un("a\0b") }
+ assert_raise(ArgumentError) { Socket.sockaddr_un("\0a\0") }
+ assert_raise(ArgumentError) { Socket.sockaddr_un("\0\0") }
+ assert_raise(ArgumentError) { Socket.sockaddr_un("\0\0a") }
assert_raise(ArgumentError) { UNIXServer.new("a\0b") }
end
+ def test_invalid
+ assert_raise(TypeError) { Socket.unpack_sockaddr_un "" }
+ end
+
+ def test_unpack
+ assert_equal("a", Socket.unpack_sockaddr_un(Socket.sockaddr_un("a").chop))
+ assert_equal("a", Socket.unpack_sockaddr_un(Socket.sockaddr_un("a").chop.chop.chop))
+ assert_equal("\0a", Socket.unpack_sockaddr_un(Socket.sockaddr_un("\0a").chop))
+ assert_equal("\0a", Socket.unpack_sockaddr_un(Socket.sockaddr_un("\0a").chop.chop.chop))
+ end
+
def test_dgram_pair
s1, s2 = UNIXSocket.pair(Socket::SOCK_DGRAM)
assert_raise(Errno::EAGAIN) { s1.recv_nonblock(10) }