From 20f8aec8976b17ad4d9da6be265594d924f368e1 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 12 May 2014 15:15:37 -0700 Subject: 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 --- tests/stdio_test.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'tests/stdio_test.cpp') diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp index 73e9dcdf7..8f6ee2b0e 100644 --- a/tests/stdio_test.cpp +++ b/tests/stdio_test.cpp @@ -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) { -- cgit v1.2.3