mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
fix incorrect mmap file offset in JSBigFileString (#48198)
Summary: `JSBigFileString` incorrectly passes the file offset to `mmap`, causing errors when `offset` is non-zero. ## Changelog: [GENERAL] [FIXED] - `JSBigFileString` fails for non-zero offset arguments Pull Request resolved: https://github.com/facebook/react-native/pull/48198 Test Plan: - verify the new unit test passes Reviewed By: cipolleschi Differential Revision: D67086826 Pulled By: javache fbshipit-source-id: 0991bb34a710b85ff0263dc553efb85ba62b4cd8
This commit is contained in:
committed by
Facebook GitHub Bot
parent
477489ce84
commit
7d0338cb0b
@@ -38,7 +38,7 @@ JSBigFileString::JSBigFileString(int fd, size_t size, off_t offset /*= 0*/)
|
||||
const static auto ps = sysconf(_SC_PAGESIZE);
|
||||
auto d = lldiv(offset, ps);
|
||||
|
||||
m_mapOff = static_cast<off_t>(d.quot);
|
||||
m_mapOff = static_cast<off_t>(d.quot) * ps;
|
||||
m_pageOff = static_cast<off_t>(d.rem);
|
||||
m_size = size + m_pageOff;
|
||||
} else {
|
||||
|
||||
@@ -60,3 +60,22 @@ TEST(JSBigFileString, MapPartTest) {
|
||||
EXPECT_EQ(needle[i], bigStr.c_str()[i]);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(JSBigFileString, MapPartAtLargeOffsetTest) {
|
||||
std::string data(8 * 4096, 'X');
|
||||
data += "Hello World!";
|
||||
|
||||
// Sub-string to actually map
|
||||
std::string needle{"or"};
|
||||
off_t offset = data.find(needle);
|
||||
|
||||
// Initialise Big String
|
||||
int fd = tempFileFromString(data);
|
||||
JSBigFileString bigStr{fd, needle.size(), offset};
|
||||
|
||||
// Test
|
||||
EXPECT_EQ(needle.length(), bigStr.size());
|
||||
for (unsigned int i = 0; i < needle.length(); ++i) {
|
||||
EXPECT_EQ(needle[i], bigStr.c_str()[i]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user