summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2010-03-25 15:28:30 -0400
committerStephen Gallagher <sgallagh@redhat.com>2010-03-25 15:55:51 -0400
commitf94abf5319d8f74cacae0a98d3925d18eb6839eb (patch)
treebdee102c43ad2ac0283ec8f3706eaf0d39902ae2 /common
parent6bb57251fe37792e545a4dc3823bc1856760ed5d (diff)
downloadsssd-f94abf5319d8f74cacae0a98d3925d18eb6839eb.tar.gz
sssd-f94abf5319d8f74cacae0a98d3925d18eb6839eb.tar.xz
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')
-rw-r--r--common/path_utils/path_utils.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/common/path_utils/path_utils.c b/common/path_utils/path_utils.c
index 52f365009..493e0a4df 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 */