microsoft/ApplicationInsights-Android

1.0-beta.8 crash: Sender.java line 332

Closed this issue · 2 comments

I have the following permissions defined in my app:

android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.ACCESS_COARSE_LOCATION

At the very least, ApplicationInsights should gracefully handle SecurityExceptions (and other exceptions), so that you don't crash our app...

I have over 100 crash reports in Crashlytics, for Sender.java line 332 with this stack trace:

Caused by java.lang.SecurityException: Permission denied (missing INTERNET permission?)
       at java.net.InetAddress.lookupHostByName(InetAddress.java)
       at java.net.InetAddress.getAllByNameImpl(InetAddress.java)
       at java.net.InetAddress.getAllByName(InetAddress.java)
       at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java)
       at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java)
       at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java)
       at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java)
       at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java)
       at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java)
       at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java)
       at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java)
       at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java)
       at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java)
       at com.microsoft.applicationinsights.library.i.a(Sender.java)
       at com.microsoft.applicationinsights.library.i.a(Sender.java)
       at com.microsoft.applicationinsights.library.i.a(Sender.java)
       at com.microsoft.applicationinsights.library.i.c(Sender.java)
       at com.microsoft.applicationinsights.library.j.a(Sender.java)
       at com.microsoft.applicationinsights.library.j.doInBackground(Sender.java)
       at android.os.AsyncTask$2.call(AsyncTask.java)
       at java.util.concurrent.FutureTask.run(FutureTask.java)
       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java)
       at java.lang.Thread.run(Thread.java)
Caused by libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
       at libcore.io.Posix.getaddrinfo(Posix.java)
       at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java)
       at java.net.InetAddress.lookupHostByName(InetAddress.java)
       at java.net.InetAddress.getAllByNameImpl(InetAddress.java)
       at java.net.InetAddress.getAllByName(InetAddress.java)
       at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java)
       at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java)
       at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java)
       at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java)
       at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java)
       at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java)
       at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java)
       at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java)
       at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java)
       at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java)
       at com.microsoft.applicationinsights.library.i.a(Sender.java)
       at com.microsoft.applicationinsights.library.i.a(Sender.java)
       at com.microsoft.applicationinsights.library.i.a(Sender.java)
       at com.microsoft.applicationinsights.library.i.c(Sender.java)
       at com.microsoft.applicationinsights.library.j.a(Sender.java)
       at com.microsoft.applicationinsights.library.j.doInBackground(Sender.java)
       at android.os.AsyncTask$2.call(AsyncTask.java)
       at java.util.concurrent.FutureTask.run(FutureTask.java)
       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java)
       at java.lang.Thread.run(Thread.java)
Caused by libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
       at libcore.io.Posix.getaddrinfo(Posix.java)
       at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java)
       at java.net.InetAddress.lookupHostByName(InetAddress.java)
       at java.net.InetAddress.getAllByNameImpl(InetAddress.java)
       at java.net.InetAddress.getAllByName(InetAddress.java)
       at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java)
       at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java)
       at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java)
       at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java)
       at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java)
       at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java)
       at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java)
       at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java)
       at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java)
       at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java)
       at com.microsoft.applicationinsights.library.i.a(Sender.java)
       at com.microsoft.applicationinsights.library.i.a(Sender.java)
       at com.microsoft.applicationinsights.library.i.a(Sender.java)
       at com.microsoft.applicationinsights.library.i.c(Sender.java)
       at com.microsoft.applicationinsights.library.j.a(Sender.java)
       at com.microsoft.applicationinsights.library.j.doInBackground(Sender.java)
       at android.os.AsyncTask$2.call(AsyncTask.java)
       at java.util.concurrent.FutureTask.run(FutureTask.java)
       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java)
       at java.lang.Thread.run(Thread.java)

Hi, sorry to read about this and again sorry for not getting in touch with you sooner.
I've looked into this and this is a strange issue.
We're not using OKHttp at all. I'm thinking that the issue might be related to using it but can't reproduce at all. You don't have a demo Repo by chance?

Thx for your help!
Benny

I investigated into this and still can't reproduce.
I have an idea, though. Looks like you are using OKHttp which causes the problem. The code from our end that triggers the issue is only meant to show up if you enable developer mode, the latest release (1.0-beta.9) fixes this. Please try out 1.0-beta.9, available later today.