Closed
Bug 826052
Opened 13 years ago
Closed 13 years ago
HashStore.cpp(252) : warning C4244: 'argument' : conversion from 'int64_t' to 'uint32_t', possible loss of data
Categories
(Toolkit :: Safe Browsing, defect)
Tracking
()
RESOLVED
FIXED
Firefox 20
People
(Reporter: dholbert, Assigned: dholbert)
References
(Blocks 1 open bug, )
Details
Attachments
(1 file)
4.85 KB,
patch
|
gcp
:
review+
|
Details | Diff | Splinter Review |
Build warnings:
{
e:/builds/moz2_slave/m-cen-w32-ntly/build/toolkit/components/url-classifier/HashStore.cpp(252) : warning C4244: 'argument' : conversion from 'int64_t' to 'uint32_t', possible loss of data
e:/builds/moz2_slave/m-cen-w32-ntly/build/toolkit/components/url-classifier/HashStore.cpp(327) : warning C4244: 'argument' : conversion from 'int64_t' to 'uint32_t', possible loss of data
}
Now that bug 824247 has made FAIL_ON_WARNINGS affect Windows builds, this blocks bug 825941.
Assignee | ||
Comment 1•13 years ago
|
||
Forgot to include a link to the log from comment 0:
https://tbpl.mozilla.org/php/getParsedLog.php?id=18385224&full=1&branch=mozilla-central
Assignee | ||
Comment 2•13 years ago
|
||
It looks like our file-seeking & file-hashing functions here only take 32-bit unsigned ints, and we're passing them a 64-bit int because that's what our "get file size" function returns.
I think we should just check whether the file size is out of bounds for a uint32_t -- if it is, we should explicitly fail; if it's not, we can static_cast it to a uint32_t for warning-free usage.
Assignee | ||
Updated•13 years ago
|
QA Contact: dholbert
Assignee | ||
Updated•13 years ago
|
Assignee: nobody → dholbert
QA Contact: dholbert
Assignee | ||
Comment 3•13 years ago
|
||
This patch
(a) adds an early check (and failure case) for file-size being larger than UINT32_MAX
(b) removes a redundant file-size lookup from CheckChecksum(), and just makes that function take the file-size as a uint32_t argument instead
(c) Adds some "is subtraction about to wrap below 0?" checks (and NS_WARNINGs / failure cases) since now the file size is unsigned & going below 0 would wrap around to a large number)
Attachment #697203 -
Flags: review?(gpascutto)
Assignee | ||
Comment 4•13 years ago
|
||
To be clear, the two chunks of code that are triggering the warnings in
comment 0 are:
> 226 nsresult
> 227 HashStore::Open()
> 228 {
[...]
> 247 int64_t fileSize;
> 248 rv = storeFile->GetFileSize(&fileSize);
> 249 NS_ENSURE_SUCCESS(rv, rv);
> 250
> 251 rv = NS_NewBufferedInputStream(getter_AddRefs(mInputStream), origStream,
> 252 fileSize);
...and...
> 302 nsresult
> 303 HashStore::CalculateChecksum(nsAutoCString& aChecksum,
> 304 int64_t aSize,
> 305 bool aChecksumPresent)
> 306 {
[...]
> 326 // Hash everything but last checksum bytes
> 327 rv = hash->UpdateFromStream(mInputStream, aSize-CHECKSUM_SIZE);
NS_NewBufferedInputStream and UpdateFromStream both take uint32_t:
https://mxr.mozilla.org/mozilla-central/source/netwerk/base/public/nsNetUtil.h#1040
https://mxr.mozilla.org/mozilla-central/source/netwerk/base/public/nsICryptoHash.idl#85
Comment 5•13 years ago
|
||
Comment on attachment 697203 [details] [diff] [review]
fix v1
Review of attachment 697203 [details] [diff] [review]:
-----------------------------------------------------------------
We should probably return the more specific NS_ERROR_FILE_CORRUPTED in some places, but none of the current code is doing that so let's do that cleanup another time.
Attachment #697203 -
Flags: review?(gpascutto) → review+
Assignee | ||
Comment 6•13 years ago
|
||
Status: NEW → ASSIGNED
Flags: in-testsuite-
Comment 7•13 years ago
|
||
Status: ASSIGNED → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
Target Milestone: --- → Firefox 20
Updated•11 years ago
|
Product: Firefox → Toolkit
You need to log in
before you can comment on or make changes to this bug.
Description
•