Skip to content

Commit 53dcedd

Browse files
committed
[compiler] Add -Wshorten-64-to-32 compiler flag for is_clang
1 parent 2c9cd92 commit 53dcedd

File tree

22 files changed

+182
-66
lines changed

22 files changed

+182
-66
lines changed

build/config/compiler/BUILD.gn

+1
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ config("strict_warnings") {
256256
cflags += [
257257
"-Wimplicit-fallthrough",
258258
"-Wheader-hygiene",
259+
"-Wshorten-64-to-32",
259260
"-Wformat-type-confusion",
260261
]
261262
}

examples/common/tracing/TraceDecoder.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ CHIP_ERROR TraceDecoder::ReadString(const char * str)
130130

131131
CHIP_ERROR TraceDecoder::LogJSON(Json::Value & json)
132132
{
133-
uint32_t protocol = json[kProtocolIdKey].asLargestUInt();
133+
auto protocol = json[kProtocolIdKey].asLargestUInt();
134134
uint16_t vendorId = protocol >> 16;
135135
uint16_t protocolId = protocol & 0xFFFF;
136136
if (!mOptions.IsProtocolEnabled(chip::Protocols::Id(chip::VendorId(vendorId), protocolId)))

examples/darwin-framework-tool/commands/provider/OTASoftwareUpdateInteractive.mm

+3-3
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ static bool ParseJsonFileAndPopulateCandidates(
7878

7979
auto vendorId = [NSNumber numberWithUnsignedInt:iter.get("vendorId", 1).asUInt()];
8080
auto productId = [NSNumber numberWithUnsignedInt:iter.get("productId", 1).asUInt()];
81-
auto softwareVersion = [NSNumber numberWithUnsignedLong:iter.get("softwareVersion", 10).asUInt64()];
81+
auto softwareVersion = [NSNumber numberWithUnsignedLongLong:iter.get("softwareVersion", 10).asUInt64()];
8282
auto softwareVersionString = [NSString stringWithUTF8String:iter.get("softwareVersionString", "1.0.0").asCString()];
8383
auto cDVersionNumber = [NSNumber numberWithUnsignedInt:iter.get("cDVersionNumber", 0).asUInt()];
8484
auto softwareVersionValid = iter.get("softwareVersionValid", true).asBool() ? YES : NO;
8585
auto minApplicableSoftwareVersion =
86-
[NSNumber numberWithUnsignedLong:iter.get("minApplicableSoftwareVersion", 0).asUInt64()];
86+
[NSNumber numberWithUnsignedLongLong:iter.get("minApplicableSoftwareVersion", 0).asUInt64()];
8787
auto maxApplicableSoftwareVersion =
88-
[NSNumber numberWithUnsignedLong:iter.get("maxApplicableSoftwareVersion", 1000).asUInt64()];
88+
[NSNumber numberWithUnsignedLongLong:iter.get("maxApplicableSoftwareVersion", 1000).asUInt64()];
8989
auto otaURL = [NSString stringWithUTF8String:iter.get("otaURL", "https://test.com").asCString()];
9090

9191
candidate.deviceModelData.vendorId = vendorId;

examples/platform/linux/Options.cpp

+5-9
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <lib/core/CHIPError.h>
2929
#include <lib/support/Base64.h>
3030
#include <lib/support/BytesToHex.h>
31+
#include <lib/support/SafeInt.h>
3132

3233
#include <credentials/examples/DeviceAttestationCredsExample.h>
3334

@@ -233,16 +234,11 @@ bool Base64ArgToVector(const char * arg, size_t maxSize, std::vector<uint8_t> &
233234
outVector.resize(maxSize);
234235

235236
size_t argLen = strlen(arg);
236-
if (argLen > maxBase64Size)
237-
{
238-
return false;
239-
}
237+
VerifyOrReturnValue(argLen <= maxBase64Size, false);
238+
VerifyOrReturnValue(chip::CanCastTo<uint32_t>(argLen), false);
240239

241-
size_t decodedLen = chip::Base64Decode32(arg, argLen, reinterpret_cast<uint8_t *>(outVector.data()));
242-
if (decodedLen == 0)
243-
{
244-
return false;
245-
}
240+
size_t decodedLen = chip::Base64Decode32(arg, static_cast<uint32_t>(argLen), reinterpret_cast<uint8_t *>(outVector.data()));
241+
VerifyOrReturnValue(decodedLen != 0, false);
246242

247243
outVector.resize(decodedLen);
248244
return true;

examples/providers/DeviceInfoProviderImpl.cpp

+7-3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <lib/support/CHIPMemString.h>
2121
#include <lib/support/CodeUtils.h>
2222
#include <lib/support/DefaultStorageKeyAllocator.h>
23+
#include <lib/support/SafeInt.h>
2324
#include <platform/internal/CHIPDeviceLayerInternal.h>
2425

2526
#include <stdlib.h>
@@ -134,6 +135,8 @@ CHIP_ERROR DeviceInfoProviderImpl::GetUserLabelLength(EndpointId endpoint, size_
134135

135136
CHIP_ERROR DeviceInfoProviderImpl::SetUserLabelAt(EndpointId endpoint, size_t index, const UserLabelType & userLabel)
136137
{
138+
VerifyOrReturnError(CanCastTo<uint32_t>(index), CHIP_ERROR_INVALID_ARGUMENT);
139+
137140
DefaultStorageKeyAllocator keyAlloc;
138141
uint8_t buf[UserLabelTLVMaxSize()];
139142
TLV::TLVWriter writer;
@@ -145,15 +148,15 @@ CHIP_ERROR DeviceInfoProviderImpl::SetUserLabelAt(EndpointId endpoint, size_t in
145148
ReturnErrorOnFailure(writer.PutString(kLabelValueTag, userLabel.value));
146149
ReturnErrorOnFailure(writer.EndContainer(outerType));
147150

148-
return mStorage->SyncSetKeyValue(keyAlloc.UserLabelIndexKey(endpoint, index), buf,
151+
return mStorage->SyncSetKeyValue(keyAlloc.UserLabelIndexKey(endpoint, static_cast<uint32_t>(index)), buf,
149152
static_cast<uint16_t>(writer.GetLengthWritten()));
150153
}
151154

152155
CHIP_ERROR DeviceInfoProviderImpl::DeleteUserLabelAt(EndpointId endpoint, size_t index)
153156
{
154157
DefaultStorageKeyAllocator keyAlloc;
155158

156-
return mStorage->SyncDeleteKeyValue(keyAlloc.UserLabelIndexKey(endpoint, index));
159+
return mStorage->SyncDeleteKeyValue(keyAlloc.UserLabelIndexKey(endpoint, static_cast<uint32_t>(index)));
157160
}
158161

159162
DeviceInfoProvider::UserLabelIterator * DeviceInfoProviderImpl::IterateUserLabel(EndpointId endpoint)
@@ -176,12 +179,13 @@ bool DeviceInfoProviderImpl::UserLabelIteratorImpl::Next(UserLabelType & output)
176179
CHIP_ERROR err = CHIP_NO_ERROR;
177180

178181
VerifyOrReturnError(mIndex < mTotal, false);
182+
VerifyOrReturnError(CanCastTo<uint32_t>(mIndex), false);
179183

180184
DefaultStorageKeyAllocator keyAlloc;
181185
uint8_t buf[UserLabelTLVMaxSize()];
182186
uint16_t len = static_cast<uint16_t>(sizeof(buf));
183187

184-
err = mProvider.mStorage->SyncGetKeyValue(keyAlloc.UserLabelIndexKey(mEndpoint, mIndex), buf, len);
188+
err = mProvider.mStorage->SyncGetKeyValue(keyAlloc.UserLabelIndexKey(mEndpoint, static_cast<uint32_t>(mIndex)), buf, len);
185189
VerifyOrReturnError(err == CHIP_NO_ERROR, false);
186190

187191
TLV::ContiguousBufferTLVReader reader;

scripts/idl/generators/java/ChipClustersCpp.jinja

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@
3333
auto * listHolder_{{depth}} = new ListHolder<ListMemberType_{{depth}}>({{source}}Size);
3434
listFreer.add(listHolder_{{depth}});
3535

36-
for (size_t i_{{depth}} = 0; i_{{depth}} < static_cast<size_t>({{source}}Size); ++i_{{depth}}) {
36+
for (jint i_{{depth}} = 0; i_{{depth}} < {{source}}Size; ++i_{{depth}}) {
3737
jobject element_{{depth}};
3838
chip::JniReferences::GetInstance().GetListItem({{source}}, i_{{depth}}, element_{{depth}});
3939
{{encode_value(
40-
"listHolder_{}->mList[i_{}]".format(depth, depth),
40+
"listHolder_{}->mList[static_cast<uint32_t>(i_{})]".format(depth, depth),
4141
"element_{}".format(depth),
4242
depth+1, encodable.without_list()
4343
)}}

src/controller/java/AndroidOperationalCredentialsIssuer.cpp

+37-14
Original file line numberDiff line numberDiff line change
@@ -169,18 +169,25 @@ CHIP_ERROR AndroidOperationalCredentialsIssuer::CallbackGenerateNOCChain(const B
169169
return err;
170170
}
171171

172+
VerifyOrReturnError(CanCastTo<uint32_t>(csrElements.size()), CHIP_ERROR_INVALID_ARGUMENT);
173+
VerifyOrReturnError(CanCastTo<uint32_t>(csrNonce.size()), CHIP_ERROR_INVALID_ARGUMENT);
174+
VerifyOrReturnError(CanCastTo<uint32_t>(csrElementsSignature.size()), CHIP_ERROR_INVALID_ARGUMENT);
175+
VerifyOrReturnError(CanCastTo<uint32_t>(attestationChallenge.size()), CHIP_ERROR_INVALID_ARGUMENT);
176+
VerifyOrReturnError(CanCastTo<uint32_t>(DAC.size()), CHIP_ERROR_INVALID_ARGUMENT);
177+
VerifyOrReturnError(CanCastTo<uint32_t>(PAI.size()), CHIP_ERROR_INVALID_ARGUMENT);
178+
172179
mOnNOCCompletionCallback = onCompletion;
173180

174181
env->ExceptionClear();
175182

176183
jbyteArray javaCsrElements;
177-
JniReferences::GetInstance().N2J_ByteArray(env, csrElements.data(), csrElements.size(), javaCsrElements);
184+
JniReferences::GetInstance().N2J_ByteArray(env, csrElements.data(), static_cast<uint32_t>(csrElements.size()), javaCsrElements);
178185

179186
jbyteArray javaCsrNonce;
180-
JniReferences::GetInstance().N2J_ByteArray(env, csrNonce.data(), csrNonce.size(), javaCsrNonce);
187+
JniReferences::GetInstance().N2J_ByteArray(env, csrNonce.data(), static_cast<uint32_t>(csrNonce.size()), javaCsrNonce);
181188

182189
jbyteArray javaCsrElementsSignature;
183-
JniReferences::GetInstance().N2J_ByteArray(env, csrElementsSignature.data(), csrElementsSignature.size(),
190+
JniReferences::GetInstance().N2J_ByteArray(env, csrElementsSignature.data(), static_cast<uint32_t>(csrElementsSignature.size()),
184191
javaCsrElementsSignature);
185192

186193
ChipLogProgress(Controller, "Parsing Certificate Signing Request");
@@ -202,8 +209,10 @@ CHIP_ERROR AndroidOperationalCredentialsIssuer::CallbackGenerateNOCChain(const B
202209
ByteSpan csr(reader.GetReadPoint(), reader.GetLength());
203210
reader.ExitContainer(containerType);
204211

212+
VerifyOrReturnError(CanCastTo<uint32_t>(csr.size()), CHIP_ERROR_INVALID_ARGUMENT);
213+
205214
jbyteArray javaCsr;
206-
JniReferences::GetInstance().N2J_ByteArray(env, csr.data(), csr.size(), javaCsr);
215+
JniReferences::GetInstance().N2J_ByteArray(env, csr.data(), static_cast<uint32_t>(csr.size()), javaCsr);
207216

208217
P256PublicKey pubkey;
209218
ReturnErrorOnFailure(VerifyCertificateSigningRequest(csr.data(), csr.size(), pubkey));
@@ -218,28 +227,36 @@ CHIP_ERROR AndroidOperationalCredentialsIssuer::CallbackGenerateNOCChain(const B
218227
}
219228

220229
jbyteArray javaAttestationChallenge;
221-
JniReferences::GetInstance().N2J_ByteArray(env, attestationChallenge.data(), attestationChallenge.size(),
230+
JniReferences::GetInstance().N2J_ByteArray(env, attestationChallenge.data(), static_cast<uint32_t>(attestationChallenge.size()),
222231
javaAttestationChallenge);
223232

224233
const ByteSpan & attestationElements = mAutoCommissioner->GetAttestationElements();
234+
VerifyOrReturnError(CanCastTo<uint32_t>(attestationElements.size()), CHIP_ERROR_INVALID_ARGUMENT);
235+
225236
jbyteArray javaAttestationElements;
226-
JniReferences::GetInstance().N2J_ByteArray(env, attestationElements.data(), attestationElements.size(),
237+
JniReferences::GetInstance().N2J_ByteArray(env, attestationElements.data(), static_cast<uint32_t>(attestationElements.size()),
227238
javaAttestationElements);
228239

229240
const ByteSpan & attestationNonce = mAutoCommissioner->GetAttestationNonce();
241+
VerifyOrReturnError(CanCastTo<uint32_t>(attestationNonce.size()), CHIP_ERROR_INVALID_ARGUMENT);
242+
230243
jbyteArray javaAttestationNonce;
231-
JniReferences::GetInstance().N2J_ByteArray(env, attestationNonce.data(), attestationNonce.size(), javaAttestationNonce);
244+
JniReferences::GetInstance().N2J_ByteArray(env, attestationNonce.data(), static_cast<uint32_t>(attestationNonce.size()),
245+
javaAttestationNonce);
232246

233247
const ByteSpan & attestationElementsSignature = mAutoCommissioner->GetAttestationSignature();
248+
VerifyOrReturnError(CanCastTo<uint32_t>(attestationElementsSignature.size()), CHIP_ERROR_INVALID_ARGUMENT);
249+
234250
jbyteArray javaAttestationElementsSignature;
235-
JniReferences::GetInstance().N2J_ByteArray(env, attestationElementsSignature.data(), attestationElementsSignature.size(),
251+
JniReferences::GetInstance().N2J_ByteArray(env, attestationElementsSignature.data(),
252+
static_cast<uint32_t>(attestationElementsSignature.size()),
236253
javaAttestationElementsSignature);
237254

238255
jbyteArray javaDAC;
239-
JniReferences::GetInstance().N2J_ByteArray(env, DAC.data(), DAC.size(), javaDAC);
256+
JniReferences::GetInstance().N2J_ByteArray(env, DAC.data(), static_cast<uint32_t>(DAC.size()), javaDAC);
240257

241258
jbyteArray javaPAI;
242-
JniReferences::GetInstance().N2J_ByteArray(env, PAI.data(), PAI.size(), javaPAI);
259+
JniReferences::GetInstance().N2J_ByteArray(env, PAI.data(), static_cast<uint32_t>(PAI.size()), javaPAI);
243260

244261
ByteSpan certificationDeclarationSpan;
245262
ByteSpan attestationNonceSpan;
@@ -255,12 +272,16 @@ CHIP_ERROR AndroidOperationalCredentialsIssuer::CallbackGenerateNOCChain(const B
255272
return err;
256273
}
257274

275+
VerifyOrReturnError(CanCastTo<uint32_t>(certificationDeclarationSpan.size()), CHIP_ERROR_INVALID_ARGUMENT);
276+
VerifyOrReturnError(CanCastTo<uint32_t>(firmwareInfoSpan.size()), CHIP_ERROR_INVALID_ARGUMENT);
277+
258278
jbyteArray javaCD;
259-
JniReferences::GetInstance().N2J_ByteArray(env, certificationDeclarationSpan.data(), certificationDeclarationSpan.size(),
260-
javaCD);
279+
JniReferences::GetInstance().N2J_ByteArray(env, certificationDeclarationSpan.data(),
280+
static_cast<uint32_t>(certificationDeclarationSpan.size()), javaCD);
261281

262282
jbyteArray javaFirmwareInfo;
263-
JniReferences::GetInstance().N2J_ByteArray(env, firmwareInfoSpan.data(), firmwareInfoSpan.size(), javaFirmwareInfo);
283+
JniReferences::GetInstance().N2J_ByteArray(env, firmwareInfoSpan.data(), static_cast<uint32_t>(firmwareInfoSpan.size()),
284+
javaFirmwareInfo);
264285

265286
jobject attestationInfo;
266287
err = N2J_AttestationInfo(env, javaAttestationChallenge, javaAttestationNonce, javaAttestationElements,
@@ -305,6 +326,8 @@ CHIP_ERROR AndroidOperationalCredentialsIssuer::LocalGenerateNOCChain(const Byte
305326
return err;
306327
}
307328

329+
VerifyOrReturnError(CanCastTo<uint32_t>(csrElements.size()), CHIP_ERROR_INVALID_ARGUMENT);
330+
308331
NodeId assignedId;
309332
if (mNodeIdRequested)
310333
{
@@ -374,7 +397,7 @@ CHIP_ERROR AndroidOperationalCredentialsIssuer::LocalGenerateNOCChain(const Byte
374397
jbyteArray javaCsr;
375398
JniReferences::GetInstance().GetEnvForCurrentThread()->ExceptionClear();
376399
JniReferences::GetInstance().N2J_ByteArray(JniReferences::GetInstance().GetEnvForCurrentThread(), csrElements.data(),
377-
csrElements.size(), javaCsr);
400+
static_cast<uint32_t>(csrElements.size()), javaCsr);
378401
JniReferences::GetInstance().GetEnvForCurrentThread()->CallVoidMethod(mJavaObjectRef, method, javaCsr);
379402
return CHIP_NO_ERROR;
380403
}

0 commit comments

Comments
 (0)