https://bugzilla.novell.com/show_bug.cgi?id=688860
https://bugzilla.novell.com/show_bug.cgi?id=688860#c0 Summary: Among HttpListeners that have overlapped prefixes, wrong HttpListener accepts requests when wildcard is used for each prefix Classification: Mono Product: Mono: Class Libraries Version: SVN Platform: Other OS/Version: Windows 7 Status: NEW Severity: Normal Priority: P5 - None Component: System AssignedTo: gonz...@novell.com ReportedBy: aenom...@novell.com QAContact: mono-bugs@lists.ximian.com Blocks: 687580 Found By: --- Blocker: --- This bug reproduces under similar condition to bug #688353, but with more complicated server setup. The pair of repro replicates WCF AJAX integration (WebScriptEnablingBehavior). It does these things: - set up three HttpListeners, for http://*:8080/Foo/, http://*:8080/Foo/js/ and http://*:8080/Foo/jsdebug. - start each HttpListener and wait for request (BeginGetContext). - Then let the client send a request to http://localhost:8080/Foo/jsdebug The server should return http://*:8080/Foo/jsdebug/. How to reproduce: - compile client.cs and server.cs. - run server.exe - run client.exe - see what is printed on client and/or server. ---- server.cs ---- using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Threading; using System.Xml; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Description; public class Test { public static void Main (string [] args) { var prefixes = new string [] { "http://*:8080/Foo/", "http://*:8080/Foo/js/", "http://*:8080/Foo/jsdebug/"}; var listeners = new List<HttpListener> (); foreach (var prefix_ in prefixes) { var prefix = args.Length > 0 ? prefix_.Replace ("*", args [0]) : prefix_; var l = new HttpListener (); listeners.Add (l); l.Prefixes.Add (prefix); l.Start (); Console.WriteLine ("{0} - {1}", l.GetHashCode (), prefix); l.BeginGetContext (delegate (IAsyncResult result) { var ctx = l.EndGetContext (result); using (var sr = new StreamReader (ctx.Request.InputStream)) Console.WriteLine (sr.ReadToEnd ()); ctx.Response.ContentType = "text/javascript; charset=utf-8"; ctx.Response.ContentLength64 = prefix.Length; using (var tw = new StreamWriter (ctx.Response.OutputStream)) tw.Write (prefix); Console.WriteLine ("{0} - received {1}", l.GetHashCode (), prefix); ctx.Response.Close (); }, null); } Console.ReadLine (); foreach (var l in listeners) l.Close (); } } ---- client.cs ---- using System; using System.IO; using System.Net; using System.ServiceModel; using System.ServiceModel.Channels; public class Test { public static void Main () { var hr = (HttpWebRequest) WebRequest.Create (new Uri ("http://localhost:8080/Foo/jsdebug")); hr.KeepAlive = false; hr.ContentType = "text/xml; charset=utf-8"; hr.Headers ["SOAPAction"] = "\"urn:foo\""; var rr = new StreamReader (hr.GetResponse ().GetResponseStream ()); Console.WriteLine (rr.ReadToEnd ()); rr.Close (); } } Some notes: - .NET returns "http://*:8080/Foo/jsdebug/" to client as expected. Mono consistently returns "http://*:8080/Foo/" instead. - This does not happen when the HTTP listener prefix does not come with "*". If you pass "localhost" to the server executable, you'll see the server returns the expected value. (It is because once we had a bug for this issue for "without wildcard" case, and that was fixed.) -- 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 - mono-bugs@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-bugs