Vitalii Vasylenko
Vitalii Vasylenko

Reputation: 4876

RestSharp is crashing with Unity3d when running on iPhone

I'm trying to attach RestSharp to Unity3d. Original RestSharp mono lib works fine in Editor, but on device its crashing with callstack

ArgumentOutOfRangeException: Argument is out of range.
Parameter name: options
at System.Security.Cryptography.X509Certificates.X509CertificateCollection.GetEnumerator () [0x00000] in <filename unknown>:0 
at System.Text.RegularExpressions.Regex.validate_options (RegexOptions options) [0x00000] in <filename unknown>:0 
at System.Text.RegularExpressions.Regex..ctor (System.String pattern, RegexOptions options) [0x00000] in <filename unknown>:0 
at RestSharp.RestClient..ctor () [0x00000] in <filename unknown>:0 
at RestSharp.RestClient..ctor (System.String baseUrl) [0x00000] in <filename unknown>:0 

That means, exception appears inside of ctor RestClient(string), which is a wrapper around default ctor. And inside of default ctor, there is

public RestClient()
    {
#if WINDOWS_PHONE
        this.UseSynchronizationContext = true;
#endif
        this.ContentHandlers = new Dictionary<string, IDeserializer>();
        this.AcceptTypes = new List<string>();
        this.DefaultParameters = new List<Parameter>();

        // register default handlers
        this.AddHandler("application/json", new JsonDeserializer());
        this.AddHandler("application/xml", new XmlDeserializer());
        this.AddHandler("text/json", new JsonDeserializer());
        this.AddHandler("text/x-json", new JsonDeserializer());
        this.AddHandler("text/javascript", new JsonDeserializer());
        this.AddHandler("text/xml", new XmlDeserializer());
        this.AddHandler("*+json", new JsonDeserializer());
        this.AddHandler("*+xml", new XmlDeserializer());
        this.AddHandler("*", new XmlDeserializer());

        this.FollowRedirects = true;
    }

At this point, i dont see where next step with Regex ctor appears. Any ideas?

Upvotes: 0

Views: 1406

Answers (2)

eamon woortman
eamon woortman

Reputation: 81

I have forked the RestSharp repository in an attempt to fix the above and other Unity related issues. It's located at: https://github.com/eamonwoortman/RestSharp.Unity.

Your and other issues have already been fixed and were tested against a 64bit standalone Windows build.

Could you verify if these fixes also work on your iOS project? Make sure you build the RestSharp.Net35.Unity project.

Upvotes: 1

eamon woortman
eamon woortman

Reputation: 81

We have encountered the same issue while building a standalone Windows project with Unity 5.2.1. In the editor it all works fine, until you create a build.

I believe the problem has something to do with the 'structuredSyntaxSuffixWildcardRegex' used in the 'AddHandler' method. While I don't know exactly why it fails, I do know a previous version of RestSharp does work for us.

I guess you're also using the latest RestSharp version, so could you give RestSharp v105.1.0 a try?

It seemed to stop functioning from Restshap v105.2.1, I am going through the commits to see a possible culprit. I will fork and fix it if I have found a solution.

Also I must inform you that in our case GZIP decompression also wasn't working due to missing Mono.Posix libraries. This problem occurred when the server returned a gzipped response and the RestClient allowed it. We had to work around that by using 'Fabman08's fix which made decompression configurable.

Upvotes: 3

Related Questions