summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDemi Marie Obenour <demi@invisiblethingslab.com>2021-04-12 11:30:51 -0400
committerMichal Domonkos <mdomonko@redhat.com>2022-07-01 10:52:14 +0200
commit4543b66f9ddbc61c760b45397bbbe1eaad2b21b3 (patch)
treef12f823de0c8663963b52965c195888c5d0272f7
parent86319dc03357c9855ca26281808b945857656a1e (diff)
downloadrpm-4543b66f9ddbc61c760b45397bbbe1eaad2b21b3.tar.gz
rpmkeys: exit non-zero on I/O errors
If writing to stdout or stderr fails, rpmkeys should exit with a non-zero status code. (cherry picked from commit fc8386be36a32f8462a0d16a2dd3e5e18f7fbc2d)
-rw-r--r--rpmkeys.c4
-rw-r--r--tests/rpmsigdig.at13
2 files changed, 17 insertions, 0 deletions
diff --git a/rpmkeys.c b/rpmkeys.c
index 542601c87..2c304de20 100644
--- a/rpmkeys.c
+++ b/rpmkeys.c
@@ -86,5 +86,9 @@ int main(int argc, char *argv[])
exit:
rpmtsFree(ts);
rpmcliFini(optCon);
+ fflush(stderr);
+ fflush(stdout);
+ if (ferror(stdout) || ferror(stderr))
+ return 255; /* I/O error */
return ec;
}
diff --git a/tests/rpmsigdig.at b/tests/rpmsigdig.at
index 6b51a967f..d60c58869 100644
--- a/tests/rpmsigdig.at
+++ b/tests/rpmsigdig.at
@@ -24,6 +24,19 @@ runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64.rpm /data/RPMS/hello-1.0-1.i38
[])
AT_CLEANUP
+# ------------------------------
+# Test rpmkeys write errors
+AT_SETUP([[rpmkeys -K no space left on stdout]])
+AT_KEYWORDS([rpmkeys digest])
+AT_CHECK([
+RPMDB_INIT[
+
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64.rpm /data/RPMS/hello-1.0-1.i386.rpm >/dev/full
+]],255,,[[Error writing to log: No space left on device
+]])
+AT_CLEANUP
+
+
AT_SETUP([rpmkeys -Kv <reconstructed> 1])
AT_KEYWORDS([rpmkeys digest])
AT_CHECK([