[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
yes: rearrange code to prevent gcc10 warning
From: |
Christophe Meyering |
Subject: |
yes: rearrange code to prevent gcc10 warning |
Date: |
Wed, 29 Jan 2020 23:27:45 -0800 |
Hello,
Using GCC10 on Fedora 31, I built coreutils from a git clone of the latest
sources.
After running
$./bootstrap && ./configure && make
I got a few deprecation warnings for sys/sysctl.h which I skipped over, and
found an interesting error while building src/yes.o:
CC src/yes.o
src/yes.c: In function 'main':
src/yes.c:110:20: error: writing 1 byte into a region of size 0
[-Werror=stringop-overflow=]
110 | buf[bufused - 1] = '\n';
| ~~~~~~~~~~~~~~~~~^~~~~~
src/yes.c:100:51: note: at offset -1 to an object with size 8192 allocated
by 'xmalloc' here
100 | char *buf = reuse_operand_strings ? *operands : xmalloc
(bufalloc);
| ^~~~~~~~~~~~~~~~~~
The compiler didn't deduce that the for loop will always iterate at least
once, therefore my first thought was to assert(operands < operand_lim)
before the start of the for loop on line 102.
I 'heard' :) about assure and decided to use that instead, before realizing
that I could make it obvious that the loop would run at least once by
converting the for loop into a do-while loop.
This avoided the warning. I also made sure the tests still pass on F31.
Chris Meyering
coreutils_yes.c.patch
Description: Text Data
- yes: rearrange code to prevent gcc10 warning,
Christophe Meyering <=