Read whole line in yes_or_no
Do not stop after 79 characters. Read the complete line to avoid arbitrary limitations. Proof of Concept: ``` cat > passwd-poc << EOF root❌0:0:root:/root:/bin/bash root❌0:0:root:/root:/bin/bash root❌0:0:root:/root:/bin/bash EOF python -c "print(80*'y')" | pwck passwd-poc ``` Two lines should still be within the file because we agreed only once to remove a duplicated line. Signed-off-by: Samanta Navarro <ferivoz@riseup.net> Reviewed-by: Alejandro Colomar <alx@kernel.org> Reviewed-by: Serge Hallyn <serge@hallyn.com>
This commit is contained in:
parent
c80788a3ac
commit
0c83b98105
@ -28,7 +28,8 @@
|
|||||||
*/
|
*/
|
||||||
bool yes_or_no (bool read_only)
|
bool yes_or_no (bool read_only)
|
||||||
{
|
{
|
||||||
char buf[80];
|
int c;
|
||||||
|
bool result;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In read-only mode all questions are answered "no".
|
* In read-only mode all questions are answered "no".
|
||||||
@ -46,11 +47,13 @@ bool yes_or_no (bool read_only)
|
|||||||
/*
|
/*
|
||||||
* Get a line and see what the first character is.
|
* Get a line and see what the first character is.
|
||||||
*/
|
*/
|
||||||
|
c = fgetc(stdin);
|
||||||
/* TODO: use gettext */
|
/* TODO: use gettext */
|
||||||
if (fgets (buf, sizeof buf, stdin) == buf) {
|
result = (c == 'y' || c == 'Y');
|
||||||
return buf[0] == 'y' || buf[0] == 'Y';
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
while (c != '\n' && c != EOF)
|
||||||
|
c = fgetc(stdin);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user