actual fix for ANDROID-56: crash inside newNetworkConfig

cast all arguments to varargs functions as good style
This commit is contained in:
Brenton Bostick 2023-03-08 16:02:12 -05:00
parent 19c5343a0a
commit 12cdf39165
2 changed files with 62 additions and 62 deletions

View file

@ -31,7 +31,7 @@
jobject createResultObject(JNIEnv *env, ZT_ResultCode code) jobject createResultObject(JNIEnv *env, ZT_ResultCode code)
{ {
jobject resultObject = env->CallStaticObjectMethod(ResultCode_class, ResultCode_fromInt_method, code); jobject resultObject = env->CallStaticObjectMethod(ResultCode_class, ResultCode_fromInt_method, (jint)code);
if(env->ExceptionCheck() || resultObject == NULL) { if(env->ExceptionCheck() || resultObject == NULL) {
LOGE("Error creating ResultCode object"); LOGE("Error creating ResultCode object");
return NULL; return NULL;
@ -43,7 +43,7 @@ jobject createResultObject(JNIEnv *env, ZT_ResultCode code)
jobject createVirtualNetworkStatus(JNIEnv *env, ZT_VirtualNetworkStatus status) jobject createVirtualNetworkStatus(JNIEnv *env, ZT_VirtualNetworkStatus status)
{ {
jobject statusObject = env->CallStaticObjectMethod(VirtualNetworkStatus_class, VirtualNetworkStatus_fromInt_method, status); jobject statusObject = env->CallStaticObjectMethod(VirtualNetworkStatus_class, VirtualNetworkStatus_fromInt_method, (jint)status);
if (env->ExceptionCheck() || statusObject == NULL) { if (env->ExceptionCheck() || statusObject == NULL) {
LOGE("Error creating VirtualNetworkStatus object"); LOGE("Error creating VirtualNetworkStatus object");
return NULL; return NULL;
@ -54,7 +54,7 @@ jobject createVirtualNetworkStatus(JNIEnv *env, ZT_VirtualNetworkStatus status)
jobject createEvent(JNIEnv *env, ZT_Event event) jobject createEvent(JNIEnv *env, ZT_Event event)
{ {
jobject eventObject = env->CallStaticObjectMethod(Event_class, Event_fromInt_method, event); jobject eventObject = env->CallStaticObjectMethod(Event_class, Event_fromInt_method, (jint)event);
if (env->ExceptionCheck() || eventObject == NULL) { if (env->ExceptionCheck() || eventObject == NULL) {
LOGE("Error creating Event object"); LOGE("Error creating Event object");
return NULL; return NULL;
@ -65,7 +65,7 @@ jobject createEvent(JNIEnv *env, ZT_Event event)
jobject createPeerRole(JNIEnv *env, ZT_PeerRole role) jobject createPeerRole(JNIEnv *env, ZT_PeerRole role)
{ {
jobject peerRoleObject = env->CallStaticObjectMethod(PeerRole_class, PeerRole_fromInt_method, role); jobject peerRoleObject = env->CallStaticObjectMethod(PeerRole_class, PeerRole_fromInt_method, (jint)role);
if (env->ExceptionCheck() || peerRoleObject == NULL) { if (env->ExceptionCheck() || peerRoleObject == NULL) {
LOGE("Error creating PeerRole object"); LOGE("Error creating PeerRole object");
return NULL; return NULL;
@ -76,7 +76,7 @@ jobject createPeerRole(JNIEnv *env, ZT_PeerRole role)
jobject createVirtualNetworkType(JNIEnv *env, ZT_VirtualNetworkType type) jobject createVirtualNetworkType(JNIEnv *env, ZT_VirtualNetworkType type)
{ {
jobject vntypeObject = env->CallStaticObjectMethod(VirtualNetworkType_class, VirtualNetworkType_fromInt_method, type); jobject vntypeObject = env->CallStaticObjectMethod(VirtualNetworkType_class, VirtualNetworkType_fromInt_method, (jint)type);
if (env->ExceptionCheck() || vntypeObject == NULL) { if (env->ExceptionCheck() || vntypeObject == NULL) {
LOGE("Error creating VirtualNetworkType object"); LOGE("Error creating VirtualNetworkType object");
return NULL; return NULL;
@ -87,7 +87,7 @@ jobject createVirtualNetworkType(JNIEnv *env, ZT_VirtualNetworkType type)
jobject createVirtualNetworkConfigOperation(JNIEnv *env, ZT_VirtualNetworkConfigOperation op) jobject createVirtualNetworkConfigOperation(JNIEnv *env, ZT_VirtualNetworkConfigOperation op)
{ {
jobject vnetConfigOpObject = env->CallStaticObjectMethod(VirtualNetworkConfigOperation_class, VirtualNetworkConfigOperation_fromInt_method, op); jobject vnetConfigOpObject = env->CallStaticObjectMethod(VirtualNetworkConfigOperation_class, VirtualNetworkConfigOperation_fromInt_method, (jint)op);
if (env->ExceptionCheck() || vnetConfigOpObject == NULL) { if (env->ExceptionCheck() || vnetConfigOpObject == NULL) {
LOGE("Error creating VirtualNetworkConfigOperation object"); LOGE("Error creating VirtualNetworkConfigOperation object");
return NULL; return NULL;
@ -113,7 +113,7 @@ jobject newInetAddress(JNIEnv *env, const sockaddr_storage &addr)
} }
inetAddressObj = env->CallStaticObjectMethod( inetAddressObj = env->CallStaticObjectMethod(
InetAddress_class, InetAddress_getByAddress_method, buff); InetAddress_class, InetAddress_getByAddress_method, (jbyteArray)buff);
} }
break; break;
case AF_INET: case AF_INET:
@ -127,7 +127,7 @@ jobject newInetAddress(JNIEnv *env, const sockaddr_storage &addr)
} }
inetAddressObj = env->CallStaticObjectMethod( inetAddressObj = env->CallStaticObjectMethod(
InetAddress_class, InetAddress_getByAddress_method, buff); InetAddress_class, InetAddress_getByAddress_method, (jbyteArray)buff);
} }
break; break;
default: default:
@ -190,7 +190,7 @@ jobject newInetSocketAddress(JNIEnv *env, const sockaddr_storage &addr)
int port = addressPort(addr); int port = addressPort(addr);
jobject inetSocketAddressObject = env->NewObject(InetSocketAddress_class, InetSocketAddress_ctor, inetAddressObject, port); jobject inetSocketAddressObject = env->NewObject(InetSocketAddress_class, InetSocketAddress_ctor, (jobject)inetAddressObject, (jint)port);
if(env->ExceptionCheck() || inetSocketAddressObject == NULL) { if(env->ExceptionCheck() || inetSocketAddressObject == NULL) {
LOGE("Error creating InetSocketAddress object"); LOGE("Error creating InetSocketAddress object");
return NULL; return NULL;
@ -211,10 +211,10 @@ jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp)
jobject pppObject = env->NewObject( jobject pppObject = env->NewObject(
PeerPhysicalPath_class, PeerPhysicalPath_class,
PeerPhysicalPath_ctor, PeerPhysicalPath_ctor,
addressObject, (jobject)addressObject,
ppp.lastSend, (jlong)ppp.lastSend,
ppp.lastReceive, (jlong)ppp.lastReceive,
ppp.preferred); (jboolean)ppp.preferred); // ANDROID-56: cast to correct size
if(env->ExceptionCheck() || pppObject == NULL) if(env->ExceptionCheck() || pppObject == NULL)
{ {
LOGE("Error creating PPP object"); LOGE("Error creating PPP object");
@ -240,13 +240,13 @@ jobject newPeer(JNIEnv *env, const ZT_Peer &peer)
jobject peerObject = env->NewObject( jobject peerObject = env->NewObject(
Peer_class, Peer_class,
Peer_ctor, Peer_ctor,
peer.address, (jlong)peer.address,
peer.versionMajor, (jint)peer.versionMajor,
peer.versionMinor, (jint)peer.versionMinor,
peer.versionRev, (jint)peer.versionRev,
peer.latency, (jint)peer.latency,
peerRoleObj, (jobject)peerRoleObj,
arrayObject); (jobjectArray)arrayObject);
if(env->ExceptionCheck() || peerObject == NULL) if(env->ExceptionCheck() || peerObject == NULL)
{ {
LOGE("Error creating Peer object"); LOGE("Error creating Peer object");
@ -298,20 +298,20 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
jobject vnetConfigObj = env->NewObject( jobject vnetConfigObj = env->NewObject(
VirtualNetworkConfig_class, VirtualNetworkConfig_class,
VirtualNetworkConfig_ctor, VirtualNetworkConfig_ctor,
vnetConfig.nwid, (jlong)vnetConfig.nwid,
vnetConfig.mac, (jlong)vnetConfig.mac,
nameStr, (jstring)nameStr,
statusObject, (jobject)statusObject,
typeObject, (jobject)typeObject,
vnetConfig.mtu, (jint)vnetConfig.mtu,
vnetConfig.dhcp, (jboolean)vnetConfig.dhcp, // ANDROID-56: cast to correct size
vnetConfig.bridge, (jboolean)vnetConfig.bridge, // ANDROID-56: cast to correct size
vnetConfig.broadcastEnabled, (jboolean)vnetConfig.broadcastEnabled, // ANDROID-56: cast to correct size
vnetConfig.portError, (jint)vnetConfig.portError,
vnetConfig.netconfRevision, (jlong)vnetConfig.netconfRevision,
assignedAddrArrayObj, (jobjectArray)assignedAddrArrayObj,
routesArrayObj, (jobjectArray)routesArrayObj,
dnsObj); (jobject)dnsObj);
if(env->ExceptionCheck() || vnetConfigObj == NULL) if(env->ExceptionCheck() || vnetConfigObj == NULL)
{ {
LOGE("Error creating new VirtualNetworkConfig object"); LOGE("Error creating new VirtualNetworkConfig object");
@ -324,7 +324,7 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
jobject newVersion(JNIEnv *env, int major, int minor, int rev) jobject newVersion(JNIEnv *env, int major, int minor, int rev)
{ {
// create a com.zerotier.sdk.Version object // create a com.zerotier.sdk.Version object
jobject versionObj = env->NewObject(Version_class, Version_ctor, major, minor, rev); jobject versionObj = env->NewObject(Version_class, Version_ctor, (jint)major, (jint)minor, (jint)rev);
if(env->ExceptionCheck() || versionObj == NULL) if(env->ExceptionCheck() || versionObj == NULL)
{ {
LOGE("Error creating new Version object"); LOGE("Error creating new Version object");
@ -355,10 +355,10 @@ jobject newVirtualNetworkRoute(JNIEnv *env, const ZT_VirtualNetworkRoute &route)
jobject routeObj = env->NewObject( jobject routeObj = env->NewObject(
VirtualNetworkRoute_class, VirtualNetworkRoute_class,
VirtualNetworkRoute_ctor, VirtualNetworkRoute_ctor,
targetObj, (jobject)targetObj,
viaObj, (jobject)viaObj,
route.flags, (jint)route.flags, // ANDROID-56: cast to correct size
route.metric); (jint)route.metric); // ANDROID-56: cast to correct size
if(env->ExceptionCheck() || routeObj == NULL) if(env->ExceptionCheck() || routeObj == NULL)
{ {
LOGE("Exception creating VirtualNetworkRoute"); LOGE("Exception creating VirtualNetworkRoute");
@ -384,7 +384,7 @@ jobject newVirtualNetworkDNS(JNIEnv *env, const ZT_VirtualNetworkDNS &dns)
return NULL; return NULL;
} }
jobject addrList = env->NewObject(ArrayList_class, ArrayList_ctor, 0); jobject addrList = env->NewObject(ArrayList_class, ArrayList_ctor, (jint)0);
if (env->ExceptionCheck() || addrList == NULL) { if (env->ExceptionCheck() || addrList == NULL) {
LOGE("Exception creating new ArrayList"); LOGE("Exception creating new ArrayList");
return NULL; return NULL;
@ -406,7 +406,7 @@ jobject newVirtualNetworkDNS(JNIEnv *env, const ZT_VirtualNetworkDNS &dns)
continue; continue;
} }
env->CallBooleanMethod(addrList, ArrayList_add_method, addr); env->CallBooleanMethod(addrList, ArrayList_add_method, (jobject)addr);
if(env->ExceptionCheck()) if(env->ExceptionCheck())
{ {
LOGE("Exception calling add"); LOGE("Exception calling add");
@ -419,8 +419,8 @@ jobject newVirtualNetworkDNS(JNIEnv *env, const ZT_VirtualNetworkDNS &dns)
jobject dnsObj = env->NewObject( jobject dnsObj = env->NewObject(
VirtualNetworkDNS_class, VirtualNetworkDNS_class,
VirtualNetworkDNS_ctor, VirtualNetworkDNS_ctor,
domain, (jstring)domain,
addrList); (jobject)addrList);
if (env->ExceptionCheck() || dnsObj == NULL) { if (env->ExceptionCheck() || dnsObj == NULL) {
LOGE("Exception creating new VirtualNetworkDNS"); LOGE("Exception creating new VirtualNetworkDNS");
return NULL; return NULL;
@ -447,10 +447,10 @@ jobject newNodeStatus(JNIEnv *env, const ZT_NodeStatus &status) {
jobject nodeStatusObj = env->NewObject( jobject nodeStatusObj = env->NewObject(
NodeStatus_class, NodeStatus_class,
NodeStatus_ctor, NodeStatus_ctor,
status.address, (jlong)status.address,
pubIdentStr, (jstring)pubIdentStr,
secIdentStr, (jstring)secIdentStr,
status.online); (jboolean)status.online);
if(env->ExceptionCheck() || nodeStatusObj == NULL) { if(env->ExceptionCheck() || nodeStatusObj == NULL) {
LOGE("Exception creating new NodeStatus"); LOGE("Exception creating new NodeStatus");
return NULL; return NULL;

View file

@ -162,7 +162,7 @@ namespace {
jint ret = env->CallIntMethod( jint ret = env->CallIntMethod(
ref->configListener, ref->configListener,
VirtualNetworkConfigListener_onNetworkConfigurationUpdated_method, VirtualNetworkConfigListener_onNetworkConfigurationUpdated_method,
(jlong)nwid, operationObject, networkConfigObject); (jlong)nwid, (jobject)operationObject, (jobject)networkConfigObject);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onNetworkConfigurationUpdated"); LOGE("Exception calling onNetworkConfigurationUpdated");
return -105; return -105;
@ -213,7 +213,7 @@ namespace {
return; return;
} }
env->CallVoidMethod(ref->frameListener, VirtualNetworkFrameListener_onVirtualNetworkFrame_method, (jlong)nwid, (jlong)sourceMac, (jlong)destMac, (jlong)etherType, (jlong)vlanid, dataArray); env->CallVoidMethod(ref->frameListener, VirtualNetworkFrameListener_onVirtualNetworkFrame_method, (jlong)nwid, (jlong)sourceMac, (jlong)destMac, (jlong)etherType, (jlong)vlanid, (jbyteArray)dataArray);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onVirtualNetworkFrame"); LOGE("Exception calling onVirtualNetworkFrame");
return; return;
@ -254,7 +254,7 @@ namespace {
switch (event) { switch (event) {
case ZT_EVENT_UP: { case ZT_EVENT_UP: {
LOGD("Event Up"); LOGD("Event Up");
env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, (jobject)eventObject);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onEvent"); LOGE("Exception calling onEvent");
return; return;
@ -263,7 +263,7 @@ namespace {
} }
case ZT_EVENT_OFFLINE: { case ZT_EVENT_OFFLINE: {
LOGD("Event Offline"); LOGD("Event Offline");
env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, (jobject)eventObject);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onEvent"); LOGE("Exception calling onEvent");
return; return;
@ -272,7 +272,7 @@ namespace {
} }
case ZT_EVENT_ONLINE: { case ZT_EVENT_ONLINE: {
LOGD("Event Online"); LOGD("Event Online");
env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, (jobject)eventObject);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onEvent"); LOGE("Exception calling onEvent");
return; return;
@ -281,7 +281,7 @@ namespace {
} }
case ZT_EVENT_DOWN: { case ZT_EVENT_DOWN: {
LOGD("Event Down"); LOGD("Event Down");
env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, (jobject)eventObject);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onEvent"); LOGE("Exception calling onEvent");
return; return;
@ -291,7 +291,7 @@ namespace {
case ZT_EVENT_FATAL_ERROR_IDENTITY_COLLISION: { case ZT_EVENT_FATAL_ERROR_IDENTITY_COLLISION: {
LOGV("Identity Collision"); LOGV("Identity Collision");
// call onEvent() // call onEvent()
env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, (jobject)eventObject);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onEvent"); LOGE("Exception calling onEvent");
return; return;
@ -311,7 +311,7 @@ namespace {
return; return;
} }
env->CallVoidMethod(ref->eventListener, EventListener_onTrace_method, messageStr); env->CallVoidMethod(ref->eventListener, EventListener_onTrace_method, (jstring)messageStr);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onTrace"); LOGE("Exception calling onTrace");
return; return;
@ -398,7 +398,7 @@ namespace {
int retval = env->CallIntMethod(ref->dataStorePutListener, int retval = env->CallIntMethod(ref->dataStorePutListener,
DataStorePutListener_onDataStorePut_method, DataStorePutListener_onDataStorePut_method,
nameStr, bufferObj, secure); (jstring)nameStr, (jbyteArray)bufferObj, (jboolean)secure);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onDataStorePut"); LOGE("Exception calling onDataStorePut");
return; return;
@ -410,7 +410,7 @@ namespace {
} else { } else {
LOGD("JNI: Delete file: %s", p); LOGD("JNI: Delete file: %s", p);
int retval = env->CallIntMethod(ref->dataStorePutListener, DataStorePutListener_onDelete_method, nameStr); int retval = env->CallIntMethod(ref->dataStorePutListener, DataStorePutListener_onDelete_method, (jstring)nameStr);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onDelete"); LOGE("Exception calling onDelete");
return; return;
@ -500,8 +500,8 @@ namespace {
int retval = (int)env->CallLongMethod( int retval = (int)env->CallLongMethod(
ref->dataStoreGetListener, ref->dataStoreGetListener,
DataStoreGetListener_onDataStoreGet_method, DataStoreGetListener_onDataStoreGet_method,
nameStr, (jstring)nameStr,
bufferObj); (jbyteArray)bufferObj);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onDataStoreGet"); LOGE("Exception calling onDataStoreGet");
return -106; return -106;
@ -570,7 +570,7 @@ namespace {
return -103; return -103;
} }
int retval = env->CallIntMethod(ref->packetSender, PacketSender_onSendPacketRequested_method, localSocket, remoteAddressObj, bufferObj, 0); int retval = env->CallIntMethod(ref->packetSender, PacketSender_onSendPacketRequested_method, (jlong)localSocket, (jobject)remoteAddressObj, (jbyteArray)bufferObj, (jint)0);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onSendPacketRequested"); LOGE("Exception calling onSendPacketRequested");
return -104; return -104;
@ -616,7 +616,7 @@ namespace {
return true; return true;
} }
jboolean ret = env->CallBooleanMethod(ref->pathChecker, PathChecker_onPathCheck_method, address, localSocket, remoteAddressObj); jboolean ret = env->CallBooleanMethod(ref->pathChecker, PathChecker_onPathCheck_method, (jlong)address, (jlong)localSocket, (jobject)remoteAddressObj);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Exception calling onPathCheck"); LOGE("Exception calling onPathCheck");
return true; return true;
@ -656,7 +656,7 @@ namespace {
// //
// may be NULL // may be NULL
// //
jobject sockAddressObject = env->CallObjectMethod(ref->pathChecker, PathChecker_onPathLookup_method, address, ss_family); jobject sockAddressObject = env->CallObjectMethod(ref->pathChecker, PathChecker_onPathLookup_method, (jlong)address, (jint)ss_family);
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
LOGE("Unable to call onPathLookup implementation"); LOGE("Unable to call onPathLookup implementation");
return false; return false;