Fix use-after-free errors in stdio_test.

fclose(3) frees the passed-in FILE*. We should close(2) the underlying fd,
not fclose(3) the stream, if we want to test what happens with a stream
we can't read from.

Bug: 14466691
Change-Id: I99fed5904b0266b9c6ae05d0b9cf2e926446c064
This commit is contained in:
Elliott Hughes 2014-05-12 15:15:37 -07:00
parent ebcc720704
commit 20f8aec897

View File

@ -102,14 +102,12 @@ TEST(stdio, getdelim_invalid) {
ASSERT_EQ(getdelim(&buffer, NULL, ' ', fp), -1);
ASSERT_EQ(EINVAL, errno);
// The stream can't be closed.
fclose(fp);
// The underlying fd can't be closed.
ASSERT_EQ(0, close(fileno(fp)));
errno = 0;
ASSERT_EQ(getdelim(&buffer, &buffer_length, ' ', fp), -1);
// glibc sometimes doesn't set errno in this particular case.
#if defined(__BIONIC__)
ASSERT_EQ(EBADF, errno);
#endif // __BIONIC__
fclose(fp);
}
TEST(stdio, getline) {
@ -171,14 +169,12 @@ TEST(stdio, getline_invalid) {
ASSERT_EQ(getline(&buffer, NULL, fp), -1);
ASSERT_EQ(EINVAL, errno);
// The stream can't be closed.
fclose(fp);
// The underlying fd can't be closed.
ASSERT_EQ(0, close(fileno(fp)));
errno = 0;
ASSERT_EQ(getline(&buffer, &buffer_length, fp), -1);
// glibc sometimes doesn't set errno in this particular case.
#if defined(__BIONIC__)
ASSERT_EQ(EBADF, errno);
#endif // __BIONIC__
fclose(fp);
}
TEST(stdio, printf_ssize_t) {