1 --- a/ntfsprogs/ntfsclone.c 2018-05-16 18:46:47.114964000 +0200
2 +++ b/ntfsprogs/ntfsclone.c 2018-07-16 14:03:20.273809100 +0200
3 @@ -776,6 +776,10 @@
4
5 /* possible partial cluster holding the backup boot sector */
6 backup_bootsector = (lcn + 1)*csize >= full_device_size;
7 + buff = (char*)ntfs_malloc(csize);
8 + if (!buff)
9 + err_exit("Not enough memory");
10 +
11 if (backup_bootsector) {
12 csize = full_device_size - lcn*csize;
13 if (csize < 0) {
14 @@ -783,10 +787,6 @@
15 }
16 }
17
18 - buff = (char*)ntfs_malloc(csize);
19 - if (!buff)
20 - err_exit("Not enough memory");
21 -
22 // need reading when not about to write ?
23 if (read_all(fd, buff, csize) == -1) {
24
25 @@ -1507,6 +1507,7 @@
26 s64 mft_no;
27 u32 mft_record_size;
28 u32 csize;
29 + u32 buff_size;
30 u32 bytes_per_sector;
31 u32 records_per_set;
32 u32 clusters_per_set;
33 @@ -1524,15 +1525,18 @@
34 /*
35 * Depending on the sizes, there may be several records
36 * per cluster, or several clusters per record.
37 + * Anyway, full clusters are needed for rescuing bad ones.
38 */
39 if (csize >= mft_record_size) {
40 records_per_set = csize/mft_record_size;
41 clusters_per_set = 1;
42 + buff_size = csize;
43 } else {
44 clusters_per_set = mft_record_size/csize;
45 records_per_set = 1;
46 + buff_size = mft_record_size;
47 }
48 - buff = (char*)ntfs_malloc(mft_record_size);
49 + buff = (char*)ntfs_malloc(buff_size);
50 if (!buff)
51 err_exit("Not enough memory");
52
53 @@ -1585,6 +1589,7 @@
54 void *fd;
55 u32 indx_record_size;
56 u32 csize;
57 + u32 buff_size;
58 u32 bytes_per_sector;
59 u32 records_per_set;
60 u32 clusters_per_set;
61 @@ -1601,16 +1606,19 @@
62 /*
63 * Depending on the sizes, there may be several records
64 * per cluster, or several clusters per record.
65 + * Anyway, full clusters are needed for rescuing bad ones.
66 */
67 indx_record_size = image->ni->vol->indx_record_size;
68 if (csize >= indx_record_size) {
69 records_per_set = csize/indx_record_size;
70 clusters_per_set = 1;
71 + buff_size = csize;
72 } else {
73 clusters_per_set = indx_record_size/csize;
74 records_per_set = 1;
75 + buff_size = indx_record_size;
76 }
77 - buff = (char*)ntfs_malloc(indx_record_size);
78 + buff = (char*)ntfs_malloc(buff_size);
79 if (!buff)
80 err_exit("Not enough memory");
81
|