Closed
Bug 17486
Opened 25 years ago
Closed 25 years ago
Incorrect & operator precedence in _PR_UnixSendFile
Categories
(NSPR :: NSPR, defect, P3)
Tracking
(Not tracked)
RESOLVED
FIXED
People
(Reporter: wtc, Assigned: srinivas)
Details
Attachments
(2 files)
720 bytes,
patch
|
Details | Diff | Splinter Review | |
533 bytes,
patch
|
Details | Diff | Splinter Review |
In unix.c, _PR_UnixSendFile, we have:
================
pagesize = PR_GetPageSize();
/*
* If the file is large, mmap and send the file in chunks so as
* to not consume too much virtual address space
*/
if ((sfd->file_offset == 0) ||
(sfd->file_offset & (pagesize - 1) == 0)) {
/*
* case 1: page-aligned file offset
*/
================
Because the == operator has a higher precedence than
the & operator, the expression (sfd->file_offset & (pagesize - 1) == 0)
gets evaluated as follows:
===> (sfd->file_offset & ((pagesize - 1) == 0))
===> (sfd->file_offset & 0) # assuming (pagesize - 1) is not 0
===> 0
The if statement reduces to:
if (sfd->file_offset == 0) {
So we fail to detect a nonzero file offset that is page
aligned. This results in the assertion failure
"addr_offset > 0" at mozilla/nsprpub/pr/src/md/unix.c (rev. 3.29),
line 3005.
Reporter | ||
Comment 1•25 years ago
|
||
Reporter | ||
Comment 2•25 years ago
|
||
Reporter | ||
Updated•25 years ago
|
Assignee: wtc → srinivas
Reporter | ||
Comment 3•25 years ago
|
||
The fix is checked in.
/cvsroot/mozilla/nsprpub/pr/src/md/unix/unix.c, revision 3.30.
/m/src/ns/nspr20/pr/src/md/unix/unix.c, revision 2.68
Srinivas, could you look into how to add a new case (where
offset is a multiple of page size) to socket.c? Thanks.
Reporter | ||
Comment 4•25 years ago
|
||
This fix is checked into NSPR20_RELEASE_3_5_BRANCH (in the
internal /m/src repository), so it will be in the NSPR
3.5.1 patch release.
/m/src/ns/nspr20/pr/src/md/unix/unix.c, revision 2.65.2.1
Status: NEW → RESOLVED
Closed: 25 years ago
Resolution: --- → FIXED
Added a new test case for PR_SendFile in socket.c, for a non-zero page-aligned
file offset.
You need to log in
before you can comment on or make changes to this bug.
Description
•