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
•