@@ -88,6 +88,8 @@ CHIP_ERROR ChipDnssdPublishService(const DnssdService * service, DnssdPublishCal
88
88
{
89
89
VerifyOrReturnError (service != nullptr , CHIP_ERROR_INVALID_ARGUMENT);
90
90
VerifyOrReturnError (sResolverObject != nullptr && sPublishMethod != nullptr , CHIP_ERROR_INCORRECT_STATE);
91
+ VerifyOrReturnError (CanCastTo<uint32_t >(service->mTextEntrySize ), CHIP_ERROR_INVALID_ARGUMENT);
92
+ VerifyOrReturnError (CanCastTo<uint32_t >(service->mSubTypeSize ), CHIP_ERROR_INVALID_ARGUMENT);
91
93
92
94
JNIEnv * env = JniReferences::GetInstance ().GetEnvForCurrentThread ();
93
95
UtfString jniName (env, service->mName );
@@ -98,23 +100,28 @@ CHIP_ERROR ChipDnssdPublishService(const DnssdService * service, DnssdPublishCal
98
100
serviceType += (service->mProtocol == DnssdServiceProtocol::kDnssdProtocolUdp ? " _udp" : " _tcp" );
99
101
UtfString jniServiceType (env, serviceType.c_str ());
100
102
103
+ auto textEntrySize = static_cast <uint32_t >(service->mTextEntrySize );
104
+
101
105
jclass stringClass = env->FindClass (" java/lang/String" );
102
- jobjectArray keys = env->NewObjectArray (service-> mTextEntrySize , stringClass, nullptr );
106
+ jobjectArray keys = env->NewObjectArray (textEntrySize , stringClass, nullptr );
103
107
104
108
jclass arrayElemType = env->FindClass (" [B" );
105
- jobjectArray datas = env->NewObjectArray (service-> mTextEntrySize , arrayElemType, nullptr );
109
+ jobjectArray datas = env->NewObjectArray (textEntrySize , arrayElemType, nullptr );
106
110
107
- for (size_t i = 0 ; i < service-> mTextEntrySize ; i++)
111
+ for (uint32_t i = 0 ; i < textEntrySize ; i++)
108
112
{
109
113
UtfString jniKey (env, service->mTextEntries [i].mKey );
110
114
env->SetObjectArrayElement (keys, i, jniKey.jniValue ());
111
115
112
- ByteArray jniData (env, (const jbyte *) service->mTextEntries [i].mData , service->mTextEntries [i].mDataSize );
116
+ VerifyOrReturnError (CanCastTo<uint32_t >(service->mTextEntries [i].mDataSize ), CHIP_ERROR_INVALID_ARGUMENT);
117
+ auto dataSize = static_cast <uint32_t >(service->mTextEntries [i].mDataSize );
118
+ ByteArray jniData (env, (const jbyte *) service->mTextEntries [i].mData , dataSize);
113
119
env->SetObjectArrayElement (datas, i, jniData.jniValue ());
114
120
}
115
121
116
- jobjectArray subTypes = env->NewObjectArray (service->mSubTypeSize , stringClass, nullptr );
117
- for (size_t i = 0 ; i < service->mSubTypeSize ; i++)
122
+ auto subTypeSize = static_cast <uint32_t >(service->mSubTypeSize );
123
+ jobjectArray subTypes = env->NewObjectArray (subTypeSize, stringClass, nullptr );
124
+ for (uint32_t i = 0 ; i < subTypeSize; i++)
118
125
{
119
126
UtfString jniSubType (env, service->mSubTypes [i]);
120
127
env->SetObjectArrayElement (subTypes, i, jniSubType.jniValue ());
@@ -316,13 +323,13 @@ void HandleResolve(jstring instanceName, jstring serviceType, jstring hostName,
316
323
if (textEntries != nullptr )
317
324
{
318
325
jobjectArray keys = (jobjectArray) env->CallObjectMethod (sMdnsCallbackObject , sGetTextEntryKeysMethod , textEntries);
319
- size_t size = env->GetArrayLength (keys);
326
+ auto size = env->GetArrayLength (keys);
320
327
TextEntry * entries = new (std::nothrow) TextEntry[size];
321
328
VerifyOrExit (entries != nullptr , ChipLogError (Discovery, " entries alloc failure" ));
322
329
memset (entries, 0 , sizeof (entries[0 ]) * size);
323
330
324
331
service.mTextEntries = entries;
325
- for (size_t i = 0 ; i < size; i++)
332
+ for (decltype (size) i = 0 ; i < size; i++)
326
333
{
327
334
jstring jniKeyObject = (jstring) env->GetObjectArrayElement (keys, i);
328
335
JniUtfString key (env, jniKeyObject);
@@ -391,9 +398,9 @@ void HandleBrowse(jobjectArray instanceName, jstring serviceType, jlong callback
391
398
392
399
VerifyOrReturn (strlen (jniServiceType.c_str ()) <= kDnssdTypeAndProtocolMaxSize , dispatch (CHIP_ERROR_INVALID_ARGUMENT));
393
400
394
- size_t size = env->GetArrayLength (instanceName);
401
+ auto size = env->GetArrayLength (instanceName);
395
402
DnssdService * service = new DnssdService[size];
396
- for (size_t i = 0 ; i < size; i++)
403
+ for (decltype (size) i = 0 ; i < size; i++)
397
404
{
398
405
JniUtfString jniInstanceName (env, (jstring) env->GetObjectArrayElement (instanceName, i));
399
406
VerifyOrReturn (strlen (jniInstanceName.c_str ()) <= Operational::kInstanceNameMaxLength ,
0 commit comments