Use overflow_exit() for overflows, not out_of_memory().
[rsync/rsync.git] / xattrs.c
index 53363bd..552a63b 100644 (file)
--- a/xattrs.c
+++ b/xattrs.c
@@ -178,8 +178,9 @@ static char *get_xattr_data(const char *fname, const char *name, size_t *len_ptr
 
        if (!datum_len && !extra_len)
                extra_len = 1; /* request non-zero amount of memory */
 
        if (!datum_len && !extra_len)
                extra_len = 1; /* request non-zero amount of memory */
-       if (datum_len + extra_len < datum_len /* checks for overflow */
-        || !(ptr = new_array(char, datum_len + extra_len)))
+       if (datum_len + extra_len < datum_len)
+               overflow_exit("get_xattr_data");
+       if (!(ptr = new_array(char, datum_len + extra_len)))
                out_of_memory("get_xattr_data");
 
        if (datum_len) {
                out_of_memory("get_xattr_data");
 
        if (datum_len) {
@@ -350,15 +351,14 @@ int send_xattr(stat_x *sxp, int f)
                int count = sxp->xattr->count;
                write_varint(f, count);
                for (rxa = sxp->xattr->items; count--; rxa++) {
                int count = sxp->xattr->count;
                write_varint(f, count);
                for (rxa = sxp->xattr->items; count--; rxa++) {
-                       int name_len = rxa->name_len;
+                       size_t name_len = rxa->name_len;
                        const char *name = rxa->name;
                        /* Strip the rsync prefix from disguised namespaces. */
                        const char *name = rxa->name;
                        /* Strip the rsync prefix from disguised namespaces. */
-                       if (
+                       if (name_len > RPRE_LEN
 #ifdef HAVE_LINUX_XATTRS
 #ifdef HAVE_LINUX_XATTRS
-                           am_root < 0
+                        && am_root < 0
 #endif
 #endif
-                        && name_len > RPRE_LEN && name[RPRE_LEN] != '%'
-                        && HAS_PREFIX(name, RSYNC_PREFIX)) {
+                        && name[RPRE_LEN] != '%' && HAS_PREFIX(name, RSYNC_PREFIX)) {
                                name += RPRE_LEN;
                                name_len -= RPRE_LEN;
                        }
                                name += RPRE_LEN;
                                name_len -= RPRE_LEN;
                        }
@@ -558,7 +558,7 @@ int recv_xattr_request(struct file_struct *file, int f_in)
                rxa->datum_len = read_varint(f_in);
 
                if (rxa->name_len + rxa->datum_len < rxa->name_len)
                rxa->datum_len = read_varint(f_in);
 
                if (rxa->name_len + rxa->datum_len < rxa->name_len)
-                       out_of_memory("recv_xattr_request"); /* overflow */
+                       overflow_exit("recv_xattr_request");
                rxa->datum = new_array(char, rxa->datum_len + rxa->name_len);
                if (!rxa->datum)
                        out_of_memory("recv_xattr_request");
                rxa->datum = new_array(char, rxa->datum_len + rxa->name_len);
                if (!rxa->datum)
                        out_of_memory("recv_xattr_request");
@@ -610,10 +610,9 @@ void receive_xattr(struct file_struct *file, int f)
                size_t datum_len = read_varint(f);
                size_t dget_len = datum_len > MAX_FULL_DATUM ? 1 + MAX_DIGEST_LEN : datum_len;
                size_t extra_len = MIGHT_NEED_RPRE ? RPRE_LEN : 0;
                size_t datum_len = read_varint(f);
                size_t dget_len = datum_len > MAX_FULL_DATUM ? 1 + MAX_DIGEST_LEN : datum_len;
                size_t extra_len = MIGHT_NEED_RPRE ? RPRE_LEN : 0;
-               if (dget_len + extra_len < dget_len)
-                       out_of_memory("receive_xattr"); /* overflow */
-               if (dget_len + extra_len + name_len < dget_len)
-                       out_of_memory("receive_xattr"); /* overflow */
+               if ((dget_len + extra_len < dget_len)
+                || (dget_len + extra_len + name_len < dget_len))
+                       overflow_exit("receive_xattr");
                ptr = new_array(char, dget_len + extra_len + name_len);
                if (!ptr)
                        out_of_memory("receive_xattr");
                ptr = new_array(char, dget_len + extra_len + name_len);
                if (!ptr)
                        out_of_memory("receive_xattr");
@@ -699,7 +698,8 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
        ssize_t list_len;
        size_t i, len;
        char *name, *ptr, sum[MAX_DIGEST_LEN];
        ssize_t list_len;
        size_t i, len;
        char *name, *ptr, sum[MAX_DIGEST_LEN];
-       int name_len, ret = 0;
+       size_t name_len;
+       int ret = 0;
 
        /* This puts the current name list into the "namebuf" buffer. */
        if ((list_len = get_xattr_names(fname)) < 0)
 
        /* This puts the current name list into the "namebuf" buffer. */
        if ((list_len = get_xattr_names(fname)) < 0)