author | majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com> |
Wed, 16 Sep 2015 09:08:20 -0700 | |
changeset 4868 | 86ad1ef86709 |
permissions | -rw-r--r-- |
4868
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
1 |
Fix for CVE-2014-9512 from upstream at https://rsync.samba.org |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
2 |
|
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
3 |
--- rsync-3.1.1/flist.c.old 2015-09-04 14:58:04.610748249 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
4 |
+++ rsync-3.1.1/flist.c 2015-09-04 15:02:22.838695225 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
5 |
@@ -2435,8 +2435,9 @@ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
6 |
return flist; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
7 |
} |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
8 |
|
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
9 |
-struct file_list *recv_file_list(int f) |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
10 |
+struct file_list *recv_file_list(int f, int dir_ndx) |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
11 |
{ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
12 |
+ const char *good_dirname = NULL; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
13 |
struct file_list *flist; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
14 |
int dstart, flags; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
15 |
int64 start_read; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
16 |
@@ -2491,6 +2492,23 @@ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
17 |
|
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
18 |
flist_expand(flist, 1); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
19 |
file = recv_file_entry(f, flist, flags); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
20 |
+ if (inc_recurse) { |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
21 |
+ static const char empty_dir[] = "\0"; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
22 |
+ const char *cur_dir = file->dirname ? file->dirname : empty_dir; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
23 |
+ if (relative_paths && *cur_dir == '/') |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
24 |
+ cur_dir++; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
25 |
+ if (cur_dir != good_dirname) { |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
26 |
+ const char *d = dir_ndx >= 0 ? f_name(dir_flist->files[dir_ndx], NULL) : empty_dir; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
27 |
+ if (strcmp(cur_dir, d) != 0) { |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
28 |
+ rprintf(FERROR, |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
29 |
+ "ABORTING due to invalid dir prefix from sender: %s (should be: %s)\n", |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
30 |
+ cur_dir, d); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
31 |
+ exit_cleanup(RERR_PROTOCOL); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
32 |
+ } |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
33 |
+ good_dirname = cur_dir; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
34 |
+ } |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
35 |
+ } |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
36 |
+ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
37 |
|
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
38 |
if (S_ISREG(file->mode)) { |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
39 |
/* Already counted */ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
40 |
@@ -2615,7 +2633,7 @@ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
41 |
rprintf(FINFO, "[%s] receiving flist for dir %d\n", |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
42 |
who_am_i(), ndx); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
43 |
} |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
44 |
- flist = recv_file_list(f); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
45 |
+ flist = recv_file_list(f, ndx); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
46 |
flist->parent_ndx = ndx; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
47 |
} |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
48 |
} |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
49 |
--- rsync-3.1.1/io.c.old 2015-09-04 14:58:15.706192874 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
50 |
+++ rsync-3.1.1/io.c 2015-09-04 15:05:23.471180002 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
51 |
@@ -1685,7 +1685,7 @@ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
52 |
rprintf(FINFO, "[%s] receiving flist for dir %d\n", |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
53 |
who_am_i(), ndx); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
54 |
} |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
55 |
- flist = recv_file_list(iobuf.in_fd); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
56 |
+ flist = recv_file_list(iobuf.in_fd, ndx); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
57 |
flist->parent_ndx = ndx; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
58 |
#ifdef SUPPORT_HARD_LINKS |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
59 |
if (preserve_hard_links) |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
60 |
--- rsync-3.1.1/main.c.old 2015-09-04 14:58:24.905761717 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
61 |
+++ rsync-3.1.1/main.c 2015-09-04 15:07:00.835145092 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
62 |
@@ -1010,7 +1010,7 @@ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
63 |
filesfrom_fd = -1; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
64 |
} |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
65 |
|
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
66 |
- flist = recv_file_list(f_in); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
67 |
+ flist = recv_file_list(f_in, -1); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
68 |
if (!flist) { |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
69 |
rprintf(FERROR,"server_recv: recv_file_list error\n"); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
70 |
exit_cleanup(RERR_FILESELECT); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
71 |
@@ -1184,7 +1184,7 @@ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
72 |
|
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
73 |
if (write_batch && !am_server) |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
74 |
start_write_batch(f_in); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
75 |
- flist = recv_file_list(f_in); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
76 |
+ flist = recv_file_list(f_in, -1); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
77 |
if (inc_recurse && file_total == 1) |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
78 |
recv_additional_file_list(f_in); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
79 |
|
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
80 |
--- rsync-3.1.1/rsync.c.old 2015-09-04 14:58:51.928552530 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
81 |
+++ rsync-3.1.1/rsync.c 2015-09-04 15:07:59.696578389 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
82 |
@@ -364,7 +364,7 @@ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
83 |
} |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
84 |
/* Send all the data we read for this flist to the generator. */ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
85 |
start_flist_forward(ndx); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
86 |
- flist = recv_file_list(f_in); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
87 |
+ flist = recv_file_list(f_in, ndx); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
88 |
flist->parent_ndx = ndx; |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
89 |
stop_flist_forward(); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
90 |
} |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
91 |
--- rsync-3.1.1/proto.h.old 2015-09-04 17:46:09.133140046 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
92 |
+++ rsync-3.1.1/proto.h 2015-09-04 17:45:12.510951663 -0700 |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
93 |
@@ -89,7 +89,7 @@ |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
94 |
void unmake_file(struct file_struct *file); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
95 |
void send_extra_file_list(int f, int at_least); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
96 |
struct file_list *send_file_list(int f, int argc, char *argv[]); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
97 |
-struct file_list *recv_file_list(int f); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
98 |
+struct file_list *recv_file_list(int f, int dir_ndx); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
99 |
void recv_additional_file_list(int f); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
100 |
int flist_find(struct file_list *flist, struct file_struct *f); |
86ad1ef86709
21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff
changeset
|
101 |
int flist_find_ignore_dirness(struct file_list *flist, struct file_struct *f); |