diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2010-03-25 15:28:30 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2010-03-25 15:55:51 -0400 |
commit | f94abf5319d8f74cacae0a98d3925d18eb6839eb (patch) | |
tree | bdee102c43ad2ac0283ec8f3706eaf0d39902ae2 /common/path_utils/path_utils.c | |
parent | 6bb57251fe37792e545a4dc3823bc1856760ed5d (diff) | |
download | sssd-f94abf5319d8f74cacae0a98d3925d18eb6839eb.tar.gz sssd-f94abf5319d8f74cacae0a98d3925d18eb6839eb.tar.bz2 sssd-f94abf5319d8f74cacae0a98d3925d18eb6839eb.zip |
Fix path_utils_ut segfault
In the case where the allocated buffer is not large enough to hold
the resulting absolute path, we were writing out a null terminator
outside of the buffer, instead of at its beginning.
Also fixes potential issue where split_path would not initialize
the count to zero if it returned a failure.
Diffstat (limited to 'common/path_utils/path_utils.c')
-rw-r--r-- | common/path_utils/path_utils.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/common/path_utils/path_utils.c b/common/path_utils/path_utils.c index 52f36500..493e0a4d 100644 --- a/common/path_utils/path_utils.c +++ b/common/path_utils/path_utils.c @@ -249,13 +249,13 @@ int make_path_absolute(char *absolute_path, size_t absolute_path_size, const cha for (dst = absolute_path; *dst && dst < dst_end; dst++); if (!(path && *path)) return result; if (dst > dst_end) { - *dst = 0; + *absolute_path = 0; return ENOBUFS; } *dst++ = '/'; if (dst > dst_end) { - *dst = 0; + *absolute_path = 0; return ENOBUFS; } @@ -272,6 +272,7 @@ char **split_path(const char *path, int *count) const char *start, *end; char *mem_block, **array_ptr, *component_ptr; + if (count) *count = 0; if (!path) return NULL; /* If path is absolute add in special "/" root component */ |