Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
4b1553e
)
Make sure that get_xattr_data() never tries to malloc 0 bytes.
author
Wayne Davison
<wayned@samba.org>
Mon, 5 Nov 2007 18:15:04 +0000
(18:15 +0000)
committer
Wayne Davison
<wayned@samba.org>
Mon, 5 Nov 2007 18:15:04 +0000
(18:15 +0000)
xattrs.c
patch
|
blob
|
blame
|
history
diff --git
a/xattrs.c
b/xattrs.c
index
2345214
..
23b5faa
100644
(file)
--- a/
xattrs.c
+++ b/
xattrs.c
@@
-161,8
+161,11
@@
static char *get_xattr_data(const char *fname, const char *name, size_t *len_ptr
int no_missing_error)
{
size_t datum_len = sys_lgetxattr(fname, name, NULL, 0);
int no_missing_error)
{
size_t datum_len = sys_lgetxattr(fname, name, NULL, 0);
+ size_t extra_len = *len_ptr;
char *ptr;
char *ptr;
+ *len_ptr = datum_len;
+
if (datum_len == (size_t)-1) {
if (errno == ENOTSUP || no_missing_error)
return NULL;
if (datum_len == (size_t)-1) {
if (errno == ENOTSUP || no_missing_error)
return NULL;
@@
-172,12
+175,12
@@
static char *get_xattr_data(const char *fname, const char *name, size_t *len_ptr
return NULL;
}
return NULL;
}
- if (datum_len + *len_ptr < datum_len /* checks for overflow */
- || !(ptr = new_array(char, datum_len + *len_ptr)))
+ 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)))
out_of_memory("get_xattr_data");
out_of_memory("get_xattr_data");
- *len_ptr = datum_len;
-
if (datum_len) {
size_t len = sys_lgetxattr(fname, name, ptr, datum_len);
if (len != datum_len) {
if (datum_len) {
size_t len = sys_lgetxattr(fname, name, ptr, datum_len);
if (len != datum_len) {