Add test that PipeCapture can read NUL byte in middle of UTF-8 char (#777973)

Test that binary data that happens to be the start of a multi-byte UTF-8
character but then contains a NUL byte is successfully read.  The test
currently detects failure thus:

    $ ./test_PipeCapture
    ...
    [ RUN      ] PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character
    test_PipeCapture.cc:346: Failure
          Expected: expectedstr
         Of length: 7
    To be equal to: capturedstr.raw()
         Of length: 0
    With first binary difference:
    < 0x00000000  "._45678"           00 5F 34 35 36 37 38
    --
    > 0x00000000  ""
    [  FAILED  ] PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character (0 ms)
    ...

Bug 777973 - Segmentation fault on bad disk
This commit is contained in:
Mike Fleetwood 2017-05-25 11:38:43 +01:00 committed by Curtis Gedak
parent 3a6a304c64
commit 6b82616d2e
1 changed files with 17 additions and 0 deletions

View File

@ -337,6 +337,23 @@ TEST_F( PipeCaptureTest, ReadEmbeddedNULCharacter )
EXPECT_TRUE( eof_signalled ); EXPECT_TRUE( eof_signalled );
} }
TEST_F( PipeCaptureTest, ReadNULByteInMiddleOfMultiByteUTF8Character )
{
// Test NUL byte in the middle of reading a multi-byte UTF-8 character.
const char * buf = "\xC0\x00_45678";
inputstr = std::string( buf, 8 );
PipeCapture pc( pipefds[ReaderFD], capturedstr );
pc.signal_eof.connect( sigc::mem_fun( *this, &PipeCaptureTest::eof_callback ) );
pc.connect_signal();
run_writer_thread();
// Initial \xC0 byte is part of an incomplete UTF-8 characters so will be skipped
// by PipeCapture.
buf = "\x00_45678";
expectedstr = std::string( buf, 7 );
EXPECT_BINARYSTRINGEQ( expectedstr, capturedstr.raw() );
EXPECT_TRUE( eof_signalled );
}
} // namespace GParted } // namespace GParted
// Custom Google Test main() which also initialises the Glib threading system for // Custom Google Test main() which also initialises the Glib threading system for