diff options
author | Liang Qi <liang.qi@qt.io> | 2017-04-07 10:18:50 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-04-07 10:24:33 +0200 |
commit | 5d6073be27cb951b692bbcc4dc0dd54cc09c9fd4 (patch) | |
tree | c87c236cd1b9c15eb5f40df3d86915687ab6c59a /tests/auto/corelib/io/largefile/tst_largefile.cpp | |
parent | 97d7d80e7355019bb23bb03c2a82908e4436deb0 (diff) | |
parent | bbb67ca32cebad312f02e916dff54e591b92af24 (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
mkspecs/linux-icc/qmake.conf
mkspecs/macx-icc/qmake.conf
mkspecs/win32-icc/qmake.conf
src/gui/painting/qgrayraster.c
Change-Id: Ib08c45ea3215be05f986ecb3e1f4b37d209aa775
Diffstat (limited to 'tests/auto/corelib/io/largefile/tst_largefile.cpp')
-rw-r--r-- | tests/auto/corelib/io/largefile/tst_largefile.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/tests/auto/corelib/io/largefile/tst_largefile.cpp b/tests/auto/corelib/io/largefile/tst_largefile.cpp index 4e7877253f..99e1d5a32f 100644 --- a/tests/auto/corelib/io/largefile/tst_largefile.cpp +++ b/tests/auto/corelib/io/largefile/tst_largefile.cpp @@ -508,23 +508,42 @@ void tst_LargeFile::mapFile() } //Mac: memory-mapping beyond EOF may succeed but it could generate bus error on access +//FreeBSD: same +//Linux: memory-mapping beyond EOF usually succeeds, but depends on the filesystem +// 32-bit: limited to 44-bit offsets +//Windows: memory-mapping beyond EOF is not allowed void tst_LargeFile::mapOffsetOverflow() { -#ifndef Q_OS_MAC - // Out-of-range mappings should fail, and not silently clip the offset - for (int i = 50; i < 63; ++i) { + enum { +#ifdef Q_OS_WIN + Succeeds = false, + MaxOffset = 63 +#else + Succeeds = true, +# if (defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)) && Q_PROCESSOR_WORDSIZE == 4 + MaxOffset = 43 +# else + MaxOffset = 63 +# endif +#endif + }; + + QByteArray zeroPage(blockSize, '\0'); + for (int i = maxSizeBits + 1; i < 63; ++i) { + bool succeeds = Succeeds && (i <= MaxOffset); uchar *address = 0; + qint64 offset = Q_INT64_C(1) << i; - address = largeFile.map(((qint64)1 << i), blockSize); -#if defined(__x86_64__) - QEXPECT_FAIL("", "fails on 64-bit Linux (QTBUG-21175)", Abort); -#endif - QVERIFY( !address ); + if (succeeds) + QTest::ignoreMessage(QtWarningMsg, "QFSFileEngine::map: Mapping a file beyond its size is not portable"); + address = largeFile.map(offset, blockSize); + QCOMPARE(!!address, succeeds); - address = largeFile.map(((qint64)1 << i) + blockSize, blockSize); - QVERIFY( !address ); + if (succeeds) + QTest::ignoreMessage(QtWarningMsg, "QFSFileEngine::map: Mapping a file beyond its size is not portable"); + address = largeFile.map(offset + blockSize, blockSize); + QCOMPARE(!!address, succeeds); } -#endif } QTEST_APPLESS_MAIN(tst_LargeFile) |