summaryrefslogtreecommitdiff
path: root/soltools/mkdepend/include.c
diff options
context:
space:
mode:
Diffstat (limited to 'soltools/mkdepend/include.c')
-rw-r--r--soltools/mkdepend/include.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/soltools/mkdepend/include.c b/soltools/mkdepend/include.c
index f525272d8c58..d1d05a389bbe 100644
--- a/soltools/mkdepend/include.c
+++ b/soltools/mkdepend/include.c
@@ -91,11 +91,30 @@ struct inclist *inc_path(char *file, char *include, boolean dot, struct Includes
if (*p == '/')
break;
if (p == file)
- strcpy(path, include);
- else {
- strncpy(path, file, (p-file) + 1);
- path[ (p-file) + 1 ] = '\0';
- strcpy(path + (p-file) + 1, include);
+ {
+ if(strlen(include) >= BUFSIZ )
+ {
+ fatalerr("include filename too long \"%s\"\n", include);
+ }
+ else
+ {
+ strcpy(path, include);
+ }
+ }
+ else
+ {
+ int partial = (p - file);
+ int inc_len = strlen(include);
+ if(inc_len + partial >= BUFSIZ )
+ {
+ fatalerr("include filename too long \"%s\"\n", include);
+ }
+ else
+ {
+ memcpy(path, file, partial);
+ memcpy(path + partial, include, inc_len);
+ path[partial + inc_len] = 0;
+ }
}
remove_dotdot(path);
if ((exists_path(incCollection, path)) && stat(path, &st) == 0 && !( st.st_mode & S_IFDIR)) {