aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2005-01-17 22:51:24 +0000
committerWayne Davison <wayned@samba.org>2005-01-17 22:51:24 +0000
commit188fed9570d7a5cb5c28f259c3be85437bc10cc6 (patch)
tree294fc09bc04185461f8ff43e9bc6cad276c1eb4c /io.c
parenteae7165c797a9546b50aed0efbc70bae7880bf0b (diff)
downloadandroid_external_rsync-188fed9570d7a5cb5c28f259c3be85437bc10cc6.tar.gz
android_external_rsync-188fed9570d7a5cb5c28f259c3be85437bc10cc6.tar.bz2
android_external_rsync-188fed9570d7a5cb5c28f259c3be85437bc10cc6.zip
Moved read_sum_head() here from sender.c (because the generator uses it
too) and improved it with better error checking.
Diffstat (limited to 'io.c')
-rw-r--r--io.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/io.c b/io.c
index 1cfcd722..762cf814 100644
--- a/io.c
+++ b/io.c
@@ -48,6 +48,7 @@ extern int am_daemon;
extern int am_sender;
extern int am_generator;
extern int eol_nulls;
+extern int csum_length;
extern int checksum_seed;
extern int protocol_version;
extern char *remote_filesfrom_file;
@@ -779,6 +780,30 @@ unsigned char read_byte(int f)
return c;
}
+/* Populate a sum_struct with values from the socket. This is
+ * called by both the sender and the receiver. */
+void read_sum_head(int f, struct sum_struct *sum)
+{
+ sum->count = read_int(f);
+ sum->blength = read_int(f);
+ if (sum->blength < 0 || sum->blength > MAX_BLOCK_SIZE) {
+ rprintf(FERROR, "Invalid block length %ld\n",
+ (long)sum->blength);
+ exit_cleanup(RERR_PROTOCOL);
+ }
+ sum->s2length = protocol_version < 27 ? csum_length : (int)read_int(f);
+ if (sum->s2length < 0 || sum->s2length > MD4_SUM_LENGTH) {
+ rprintf(FERROR, "Invalid checksum length %d\n", sum->s2length);
+ exit_cleanup(RERR_PROTOCOL);
+ }
+ sum->remainder = read_int(f);
+ if (sum->remainder < 0 || sum->remainder > sum->blength) {
+ rprintf(FERROR, "Invalid remainder length %ld\n",
+ (long)sum->remainder);
+ exit_cleanup(RERR_PROTOCOL);
+ }
+}
+
/**
* Sleep after writing to limit I/O bandwidth usage.