mirror of
https://github.com/emanuele-f/PCAPdroid.git
synced 2026-06-19 21:05:25 +08:00
Add NULL checks to prevent crash
This commit is contained in:
parent
8d1a1689c0
commit
f5ff237a9b
@ -81,6 +81,7 @@ static u_int16_t ip_checksum(const void *buf, size_t hdr_len) {
|
||||
static u_int32_t getIPv4Pref(vpnproxy_data_t *proxy, const char *key) {
|
||||
JNIEnv *env = proxy->env;
|
||||
struct in_addr addr;
|
||||
const char *value = NULL;
|
||||
jclass vpn_service_cls = (*env)->GetObjectClass(env, proxy->vpn_service);
|
||||
|
||||
jmethodID midMethod = (*env)->GetMethodID(env, vpn_service_cls, key, "()Ljava/lang/String;");
|
||||
@ -89,7 +90,8 @@ static u_int32_t getIPv4Pref(vpnproxy_data_t *proxy, const char *key) {
|
||||
|
||||
jstring obj = (*env)->CallObjectMethod(env, proxy->vpn_service, midMethod);
|
||||
|
||||
const char *value = (*env)->GetStringUTFChars(env, obj, 0);
|
||||
if(obj)
|
||||
value = (*env)->GetStringUTFChars(env, obj, 0);
|
||||
|
||||
if(!value)
|
||||
__android_log_print(ANDROID_LOG_FATAL, VPN_TAG, "%s() returned non-string", key);
|
||||
@ -99,8 +101,6 @@ static u_int32_t getIPv4Pref(vpnproxy_data_t *proxy, const char *key) {
|
||||
if(inet_aton(value, &addr) == 0)
|
||||
__android_log_print(ANDROID_LOG_ERROR, VPN_TAG, "%s() returned invalid address", key);
|
||||
|
||||
(*env)->ReleaseStringUTFChars(env, obj, value);
|
||||
|
||||
return(addr.s_addr);
|
||||
}
|
||||
|
||||
@ -151,6 +151,7 @@ static void protect_sock_callback(zdtun_t *tun, socket_t sock) {
|
||||
static char* getApplicationByUid(vpnproxy_data_t *proxy, int uid, char *buf, size_t bufsize) {
|
||||
JNIEnv *env = proxy->env;
|
||||
jclass vpn_service_cls = (*env)->GetObjectClass(env, proxy->vpn_service);
|
||||
const char *value = NULL;
|
||||
|
||||
jmethodID midMethod = (*env)->GetMethodID(env, vpn_service_cls, "getApplicationByUid", "(I)Ljava/lang/String;");
|
||||
if(!midMethod)
|
||||
@ -158,7 +159,8 @@ static char* getApplicationByUid(vpnproxy_data_t *proxy, int uid, char *buf, siz
|
||||
|
||||
jstring obj = (*env)->CallObjectMethod(env, proxy->vpn_service, midMethod, uid);
|
||||
|
||||
const char *value = (*env)->GetStringUTFChars(env, obj, 0);
|
||||
if(obj)
|
||||
value = (*env)->GetStringUTFChars(env, obj, 0);
|
||||
|
||||
if(!value) {
|
||||
strncpy(buf, "???", bufsize);
|
||||
@ -169,8 +171,6 @@ static char* getApplicationByUid(vpnproxy_data_t *proxy, int uid, char *buf, siz
|
||||
strncpy(buf, value, bufsize);
|
||||
buf[bufsize-1] = '\0';
|
||||
|
||||
(*env)->ReleaseStringUTFChars(env, obj, value);
|
||||
|
||||
return(buf);
|
||||
}
|
||||
|
||||
@ -244,6 +244,8 @@ static int resolve_uid(zdtun_t *tun, const zdtun_conn_t *conn_info, void **conn_
|
||||
|
||||
if(uid == 0)
|
||||
strncpy(appbuf, "ROOT", sizeof(appbuf));
|
||||
else if(uid == 1051)
|
||||
strncpy(appbuf, "netd", sizeof(appbuf));
|
||||
else
|
||||
getApplicationByUid(proxy, uid, appbuf, sizeof(appbuf));
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user