From 07b82f2ca3bb5f75c5ec0745e90217edd471ca16 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 17 Jan 2023 19:16:29 +0100 Subject: [PATCH] fflush: Fix a buffer overrun on 32-bit Android. * lib/stdio-impl.h (fp_): On Android, change the type of _offset to 'long'. * lib/fflush.c (update_fpos_cache): On Android, update a 'long', not an 'fpos_t'. --- ChangeLog | 8 ++++++++ lib/fflush.c | 2 +- lib/stdio-impl.h | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9c6ba69cdb..20d1170da4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-01-17 Bruno Haible + + fflush: Fix a buffer overrun on 32-bit Android. + * lib/stdio-impl.h (fp_): On Android, change the type of _offset to + 'long'. + * lib/fflush.c (update_fpos_cache): On Android, update a 'long', not an + 'fpos_t'. + 2023-01-17 Bruno Haible execute tests: Avoid test failure on Android. diff --git a/lib/fflush.c b/lib/fflush.c index 69511cdeb6..41a46882a1 100644 --- a/lib/fflush.c +++ b/lib/fflush.c @@ -99,7 +99,7 @@ update_fpos_cache (_GL_ATTRIBUTE_MAYBE_UNUSED FILE *fp, { # if defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ -# if defined __CYGWIN__ +# if defined __CYGWIN__ || defined __ANDROID__ /* fp_->_offset is typed as an integer. */ fp_->_offset = pos; # else diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h index ed32e6981a..928b851617 100644 --- a/lib/stdio-impl.h +++ b/lib/stdio-impl.h @@ -96,7 +96,7 @@ unsigned char _nbuf[1]; \ struct { unsigned char *_base; size_t _size; } _lb; \ int _blksize; \ - fpos_t _offset; \ + long _offset; \ /* More fields, not relevant here. */ \ } *) fp) # else -- 2.39.5