https://bugzilla.novell.com/show_bug.cgi?id=655637
https://bugzilla.novell.com/show_bug.cgi?id=655637#c0 Summary: UnixEndPoint not deserializing correctly Classification: Mono Product: Mono: Class Libraries Version: SVN Platform: x86-64 OS/Version: Ubuntu Status: NEW Severity: Normal Priority: P5 - None Component: Mono.POSIX AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: No Description of Problem: The method UnixEndPoint.Create(SocketAddress socketAddress) does not deserialize correctly in two cases: 1. The UnixEndPointFilename is very long 2. Trying to get the RemoteEndPoint Steps to reproduce the problem: 1. Compile program: using System; using System.Net.Sockets; using Mono.Unix; public class Program { static void Main() { var ep = new UnixEndPoint("/tmp/meinmailmiteinemunglaublichuebertriebenlangennamen"); var sock = new Socket (AddressFamily.Unix, SocketType.Stream, ProtocolType.IP); sock.Bind(ep); sock.Listen(10); var sock2 = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP); sock2.Connect(ep); sock2.Send(new byte[]{0xAB}); var acc = sock.Accept(); var localEp = acc.LocalEndPoint; Console.WriteLine("Local unix domain: " + localEp.ToString()); var remoteEp = acc.RemoteEndPoint; Console.WriteLine("Remote unix domain: " + remoteEp.ToString()); } } 2. Run it Actual Results: Local unix domain: /tmp/meinmailmiteinemunglaubli Unhandled Exception: System.OverflowException: Number overflow. at (wrapper managed-to-native) object:__icall_wrapper_mono_array_new_specific (intptr,int) at Mono.Unix.UnixEndPoint.Create (System.Net.SocketAddress socketAddress) [0x00000] in /home/meinersbur/Desktop/mono/mcs/class/Mono.Posix/Mono.Unix/UnixEndPoint.cs:78 at System.Net.Sockets.Socket.get_RemoteEndPoint () [0x0005a] in /home/meinersbur/Desktop/mono/mcs/class/System/System.Net.Sockets/Socket_2_1.cs:1070 at meinmail.Program.MainApp (System.String[] args) [0x0007a] in /home/meinersbur/Projects/meinmail/meinmail/Program.cs:31 at meinmail.Program.Main () [0x00000] in /home/meinersbur/Projects/meinmail/meinmail/Program.cs:12 Expected Results: Local unix domain: /tmp/meinmailmiteinemunglaublichunduebertriebenlangennamen Remote unix domain: Additional Information: Case 1 is probably result of the limited space in 'struct sockaddr' to store the filename. I'd assume 13 ASCII characters (+ one NUL) corresponding to the structure's 'char sa_data[14]', but obviously it remembers more characters. However, it successfully created that file and one can connect to it. The problem remains that it prints garbage when the filename is trimmed. In this example, it prints '\x01', in other cases I also saw it print other garbage like "�v" ("\uFFFD\x10v\x01"). Clearly, it shouldn't do so. Case 2 is is the result of the remote endpoint having no name. The SocketInformation consists of a byte array with two entries, but UnixEndPoint expects at least a filename consisting of a terminating NUL byte. Since it is missing, it allocates 'new byte[-1]', which causes the exception. Using git commit bcdbd24355554f16e0a0bf86f7624ad731b46ade -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
