diff --git a/cpio-2.11-treat-read-errors.patch b/cpio-2.11-treat-read-errors.patch index a92922c..b15b8be 100644 --- a/cpio-2.11-treat-read-errors.patch +++ b/cpio-2.11-treat-read-errors.patch @@ -1,41 +1,22 @@ -commit 57288911a7882d663d6aa231158a3616f2ab2ed9 -Author: Pavel Raiskup -AuthorDate: Mon Sep 23 15:35:30 2013 +0200 -Commit: Pavel Raiskup -CommitDate: Mon Sep 23 16:42:11 2013 +0200 - - Use ssize_t for input buffer size - - Bug report: https://bugzilla.redhat.com/show_bug.cgi?id=996150 - - * src/global.c: Use ssize_t rather than size_t for input_size. - * src/extern.h: Likewise. - -diff --git a/src/extern.h b/src/extern.h -index ef00242..1e7193e 100644 ---- a/src/extern.h -+++ b/src/extern.h -@@ -83,7 +83,8 @@ extern int debug_flag; - extern char *input_buffer, *output_buffer; - extern char *in_buff, *out_buff; - extern size_t input_buffer_size; --extern size_t input_size, output_size; -+extern ssize_t input_size; -+extern size_t output_size; - extern off_t input_bytes, output_bytes; - - extern char *directory_name; -diff --git a/src/global.c b/src/global.c -index e08e188..a08006e 100644 ---- a/src/global.c -+++ b/src/global.c -@@ -156,7 +156,8 @@ size_t input_buffer_size; - char *in_buff, *out_buff; - - /* Current number of bytes stored at `input_buff' and `output_buff'. */ --size_t input_size, output_size; -+ssize_t input_size; -+size_t output_size; - - off_t input_bytes, output_bytes; - +diff --git a/src/util.c b/src/util.c +index 00953d5..2a821c7 100644 +--- a/src/util.c ++++ b/src/util.c +@@ -203,7 +203,7 @@ tape_fill_input_buffer (int in_des, int num_bytes) + get_next_reel (in_des); + input_size = rmtread (in_des, input_buffer, num_bytes); + } +- if (input_size < 0) ++ if (input_size == SAFE_READ_ERROR) + error (1, errno, _("read error")); + if (input_size == 0) + { +@@ -224,7 +224,7 @@ disk_fill_input_buffer (int in_des, off_t num_bytes) + in_buff = input_buffer; + num_bytes = (num_bytes < DISK_IO_BLOCK_SIZE) ? num_bytes : DISK_IO_BLOCK_SIZE; + input_size = read (in_des, input_buffer, num_bytes); +- if (input_size < 0) ++ if (input_size == SAFE_READ_ERROR) + { + input_size = 0; + return (-1); diff --git a/cpio.spec b/cpio.spec index b0dff58..838799c 100644 --- a/cpio.spec +++ b/cpio.spec @@ -1,7 +1,7 @@ Summary: A GNU archiving program Name: cpio Version: 2.11 -Release: 26%{?dist} +Release: 27%{?dist} License: GPLv3+ Group: Applications/Archiving URL: http://www.gnu.org/software/cpio/ @@ -30,9 +30,10 @@ Patch8: cpio-2.11-crc-fips-nit.patch # ~> upstream Patch9: cpio-2.11-crc-large-files.patch -# Allow treat read() errors by changing type of input_size to signed integer. +# Allow treat read() errors by checking for SAFE_READ_ERROR # ~> downstream # ~> http://lists.gnu.org/archive/html/bug-cpio/2013-09/msg00005.html +# ~> http://lists.gnu.org/archive/html/bug-cpio/2014-05/msg00001.html Patch10: cpio-2.11-treat-read-errors.patch # Small typo in RU translation @@ -124,6 +125,9 @@ fi %{_infodir}/*.info* %changelog +* Sat May 24 2014 Pavel Raiskup - 2.11-27 +- better fix for bad read() error checking (#996150) + * Mon Apr 07 2014 Pavel Raiskup - 2.11-26 - fix manual page to warn users about inode truncation (#952313) - fix for RU translation (#1075510)