GNU bug report logs -
#7370
[PATCH] csplit: diagnose file counter wraparound
Previous Next
Reported by: Paul Eggert <eggert <at> cs.ucla.edu>
Date: Thu, 11 Nov 2010 08:24:02 UTC
Severity: normal
Tags: patch
Done: Jim Meyering <jim <at> meyering.net>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Sun, 17 Apr 2011 10:59:32 +0200
with message-id <87vcydcky3.fsf <at> rho.meyering.net>
and subject line Re: bug#7370: [PATCH] csplit: diagnose file counter wraparound
has caused the GNU bug report #7370,
regarding [PATCH] csplit: diagnose file counter wraparound
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
7370: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7370
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
(Ordinarily I guess I'd just install something like this, but since
we're near a release I held off. The bug is unlikely in practice.)
* src/csplit.c (create_output_file): Detect overflow when the
file counter wraps around, and exit with a diagnostic. Formerly
the code silently wrapped around and wrote to the wrong file,
losing output data.
---
src/csplit.c | 24 ++++++++++++++++--------
1 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/src/csplit.c b/src/csplit.c
index 531e492..9505076 100644
--- a/src/csplit.c
+++ b/src/csplit.c
@@ -917,19 +917,27 @@ make_filename (unsigned int num)
static void
create_output_file (void)
{
- sigset_t oldset;
bool fopen_ok;
int fopen_errno;
output_filename = make_filename (files_created);
- /* Create the output file in a critical section, to avoid races. */
- sigprocmask (SIG_BLOCK, &caught_signals, &oldset);
- output_stream = fopen (output_filename, "w");
- fopen_ok = (output_stream != NULL);
- fopen_errno = errno;
- files_created += fopen_ok;
- sigprocmask (SIG_SETMASK, &oldset, NULL);
+ if (files_created == UINT_MAX)
+ {
+ fopen_ok = false;
+ fopen_errno = EOVERFLOW;
+ }
+ else
+ {
+ /* Create the output file in a critical section, to avoid races. */
+ sigset_t oldset;
+ sigprocmask (SIG_BLOCK, &caught_signals, &oldset);
+ output_stream = fopen (output_filename, "w");
+ fopen_ok = (output_stream != NULL);
+ fopen_errno = errno;
+ files_created += fopen_ok;
+ sigprocmask (SIG_SETMASK, &oldset, NULL);
+ }
if (! fopen_ok)
{
--
1.7.2
[Message part 3 (message/rfc822, inline)]
Paul Eggert wrote:
> (Ordinarily I guess I'd just install something like this, but since
> we're near a release I held off. The bug is unlikely in practice.)
>
> * src/csplit.c (create_output_file): Detect overflow when the
> file counter wraps around, and exit with a diagnostic. Formerly
> the code silently wrapped around and wrote to the wrong file,
> losing output data.
This was pushed in December. Closing.
This bug report was last modified 14 years and 125 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.