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
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp
index 73e9dcd..8f6ee2b 100644
--- a/tests/stdio_test.cpp
+++ b/tests/stdio_test.cpp
@@ -102,14 +102,12 @@
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 @@
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) {