projects
/
debian
/
tar
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
prepare to upload again
[debian/tar]
/
lib
/
rtapelib.c
diff --git
a/lib/rtapelib.c
b/lib/rtapelib.c
index 51faf3ce91dbd50496705ff15338e87d58c39466..3aee42865398af40ddb4ef6f7fd47d668f517e88 100644
(file)
--- a/
lib/rtapelib.c
+++ b/
lib/rtapelib.c
@@
-121,7
+121,7
@@
do_command (int handle, const char *buffer)
/* Save the current pipe handler and try to make the request. */
size_t length = strlen (buffer);
/* Save the current pipe handler and try to make the request. */
size_t length = strlen (buffer);
- RETSIGTYPE (*pipe_handler) () = signal (SIGPIPE, SIG_IGN);
+ RETSIGTYPE (*pipe_handler) (
int
) = signal (SIGPIPE, SIG_IGN);
ssize_t written = full_write (WRITE_SIDE (handle), buffer, length);
signal (SIGPIPE, pipe_handler);
ssize_t written = full_write (WRITE_SIDE (handle), buffer, length);
signal (SIGPIPE, pipe_handler);
@@
-425,6
+425,9
@@
rmt_open__ (const char *file_name, int open_mode, int bias,
}
/* FIXME: Should somewhat validate the decoding, here. */
}
/* FIXME: Should somewhat validate the decoding, here. */
+ if (gethostbyname (remote_host) == NULL)
+ error (EXIT_ON_EXEC_ERROR, 0, _("Cannot connect to %s: resolve failed"),
+ remote_host);
if (remote_user && *remote_user == '\0')
remote_user = 0;
if (remote_user && *remote_user == '\0')
remote_user = 0;
@@
-570,7
+573,8
@@
rmt_read__ (int handle, char *buffer, size_t length)
sprintf (command_buffer, "R%lu\n", (unsigned long) length);
if (do_command (handle, command_buffer) == -1
sprintf (command_buffer, "R%lu\n", (unsigned long) length);
if (do_command (handle, command_buffer) == -1
- || (status = get_status (handle)) == SAFE_READ_ERROR)
+ || (status = get_status (handle)) == SAFE_READ_ERROR
+ || status > length)
return SAFE_READ_ERROR;
for (counter = 0; counter < status; counter += rlen, buffer += rlen)
return SAFE_READ_ERROR;
for (counter = 0; counter < status; counter += rlen, buffer += rlen)
@@
-592,7
+596,7
@@
size_t
rmt_write__ (int handle, char *buffer, size_t length)
{
char command_buffer[COMMAND_BUFFER_SIZE];
rmt_write__ (int handle, char *buffer, size_t length)
{
char command_buffer[COMMAND_BUFFER_SIZE];
- RETSIGTYPE (*pipe_handler) ();
+ RETSIGTYPE (*pipe_handler) (
int
);
size_t written;
sprintf (command_buffer, "W%lu\n", (unsigned long) length);
size_t written;
sprintf (command_buffer, "W%lu\n", (unsigned long) length);
@@
-706,6
+710,12
@@
rmt_ioctl__ (int handle, int operation, char *argument)
|| (status = get_status (handle), status == -1))
return -1;
|| (status = get_status (handle), status == -1))
return -1;
+ if (status > sizeof (struct mtop))
+ {
+ errno = EOVERFLOW;
+ return -1;
+ }
+
for (; status > 0; status -= counter, argument += counter)
{
counter = safe_read (READ_SIDE (handle), argument, status);
for (; status > 0; status -= counter, argument += counter)
{
counter = safe_read (READ_SIDE (handle), argument, status);