aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pj_open_lib.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/pj_open_lib.c b/src/pj_open_lib.c
index 99f3f69b..859adede 100644
--- a/src/pj_open_lib.c
+++ b/src/pj_open_lib.c
@@ -116,6 +116,10 @@ pj_open_lib_ex(projCtx ctx, const char *name, const char *mode,
/* check if ~/name */
if (*name == '~' && strchr(dir_chars,name[1]) )
if ((sysname = getenv("HOME")) != NULL) {
+ if( strlen(sysname) + 1 + strlen(name) + 1 > sizeof(fname) )
+ {
+ return NULL;
+ }
(void)strcpy(fname, sysname);
fname[n = (int)strlen(fname)] = DIR_CHAR;
fname[++n] = '\0';
@@ -137,6 +141,10 @@ pj_open_lib_ex(projCtx ctx, const char *name, const char *mode,
/* or is environment PROJ_LIB defined */
else if ((sysname = getenv("PROJ_LIB")) || (sysname = proj_lib_name)) {
+ if( strlen(sysname) + 1 + strlen(name) + 1 > sizeof(fname) )
+ {
+ return NULL;
+ }
(void)strcpy(fname, sysname);
fname[n = (int)strlen(fname)] = DIR_CHAR;
fname[++n] = '\0';
@@ -160,9 +168,12 @@ pj_open_lib_ex(projCtx ctx, const char *name, const char *mode,
{
for (i = 0; fid == NULL && i < path_count; i++)
{
- sprintf(fname, "%s%c%s", search_path[i], DIR_CHAR, name);
- sysname = fname;
- fid = pj_ctx_fopen(ctx, sysname, mode);
+ if( strlen(search_path[i]) + 1 + strlen(name) + 1 <= sizeof(fname) )
+ {
+ sprintf(fname, "%s%c%s", search_path[i], DIR_CHAR, name);
+ sysname = fname;
+ fid = pj_ctx_fopen(ctx, sysname, mode);
+ }
}
if (fid)
{