diff options
| author | Alex Smith <alex@alex-smith.me.uk> | 2012-07-31 10:12:33 +0100 |
|---|---|---|
| committer | Alex Smith <alex@alex-smith.me.uk> | 2012-07-31 12:08:45 +0100 |
| commit | caa1e8b74245bd1602bd9d6ae642e34beb583a00 (patch) | |
| tree | 9f76687a65e0bab66d10ee606636d9ac55bc49f7 | |
| parent | 8ffd0477dd4998324e051800da35cadd91a7fb8c (diff) | |
Fix CID 712419, 712420, 712421, 712422: Unintentional sign extension to 64 bits.hrev44443
| -rw-r--r-- | src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp | 5 | ||||
| -rw-r--r-- | src/add-ons/kernel/file_systems/bfs/Inode.cpp | 5 | ||||
| -rw-r--r-- | src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp | 3 |
3 files changed, 8 insertions, 5 deletions
diff --git a/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp b/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp index b0d446f75b..0540354b24 100644 --- a/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp +++ b/src/add-ons/kernel/file_systems/bfs/BlockAllocator.cpp @@ -1990,8 +1990,9 @@ BlockAllocator::_CheckInodeBlocks(Inode* inode, const char* name) if (status != B_OK) return status; - int32 maxIndex = (indirect.Length() << fVolume->BlockShift()) - / sizeof(block_run); + int32 maxIndex = + ((uint32)indirect.Length() << fVolume->BlockShift()) + / sizeof(block_run); for (int32 index = 0; index < maxIndex; ) { block_run* runs = (block_run*)cachedDirect.SetTo( diff --git a/src/add-ons/kernel/file_systems/bfs/Inode.cpp b/src/add-ons/kernel/file_systems/bfs/Inode.cpp index 8e0c0f0dac..8abf77c3e9 100644 --- a/src/add-ons/kernel/file_systems/bfs/Inode.cpp +++ b/src/add-ons/kernel/file_systems/bfs/Inode.cpp @@ -1517,7 +1517,8 @@ Inode::FindBlockRun(off_t pos, block_run& run, off_t& offset) << fVolume->BlockShift(); if (runBlockEnd > pos) { run = data->direct[current]; - offset = runBlockEnd - (run.Length() << fVolume->BlockShift()); + offset = runBlockEnd + - ((uint32)run.Length() << fVolume->BlockShift()); return fVolume->ValidateBlockRun(run); } } @@ -1878,7 +1879,7 @@ Inode::_GrowStream(Transaction& transaction, off_t size) data->max_indirect_range = HOST_ENDIAN_TO_BFS_INT64( data->MaxIndirectRange() - + (run.Length() << fVolume->BlockShift())); + + ((uint32)run.Length() << fVolume->BlockShift())); data->size = HOST_ENDIAN_TO_BFS_INT64(blocksNeeded > 0 ? data->MaxIndirectRange() : size); continue; diff --git a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp index fff1563cc1..ad9b88774d 100644 --- a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp @@ -527,7 +527,8 @@ bfs_get_file_map(fs_volume* _volume, fs_vnode* _node, off_t offset, size_t size, return status; vecs[index].offset = volume->ToOffset(run) + offset - fileOffset; - vecs[index].length = (run.Length() << blockShift) - offset + fileOffset; + vecs[index].length = ((uint32)run.Length() << blockShift) + - offset + fileOffset; // are we already done? if ((uint64)size <= (uint64)vecs[index].length |
