summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dso/dso_dlfcn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/dso/dso_dlfcn.c')
-rw-r--r--src/lib/libcrypto/dso/dso_dlfcn.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/lib/libcrypto/dso/dso_dlfcn.c b/src/lib/libcrypto/dso/dso_dlfcn.c
index f734c1c6b7..656cd496f8 100644
--- a/src/lib/libcrypto/dso/dso_dlfcn.c
+++ b/src/lib/libcrypto/dso/dso_dlfcn.c
@@ -269,6 +269,7 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1,
269 const char *filespec2) 269 const char *filespec2)
270 { 270 {
271 char *merged; 271 char *merged;
272 size_t len;
272 273
273 if(!filespec1 && !filespec2) 274 if(!filespec1 && !filespec2)
274 { 275 {
@@ -280,18 +281,20 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1,
280 same goes if the second file specification is missing. */ 281 same goes if the second file specification is missing. */
281 if (!filespec2 || filespec1[0] == '/') 282 if (!filespec2 || filespec1[0] == '/')
282 { 283 {
283 merged = OPENSSL_malloc(strlen(filespec1) + 1); 284 len = strlen(filespec1) + 1;
285 merged = OPENSSL_malloc(len);
284 if(!merged) 286 if(!merged)
285 { 287 {
286 DSOerr(DSO_F_DLFCN_MERGER, 288 DSOerr(DSO_F_DLFCN_MERGER,
287 ERR_R_MALLOC_FAILURE); 289 ERR_R_MALLOC_FAILURE);
288 return(NULL); 290 return(NULL);
289 } 291 }
290 strcpy(merged, filespec1); 292 strlcpy(merged, filespec1, len);
291 } 293 }
292 /* If the first file specification is missing, the second one rules. */ 294 /* If the first file specification is missing, the second one rules. */
293 else if (!filespec1) 295 else if (!filespec1)
294 { 296 {
297 len = strlen(filespec2) + 1;
295 merged = OPENSSL_malloc(strlen(filespec2) + 1); 298 merged = OPENSSL_malloc(strlen(filespec2) + 1);
296 if(!merged) 299 if(!merged)
297 { 300 {
@@ -299,7 +302,7 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1,
299 ERR_R_MALLOC_FAILURE); 302 ERR_R_MALLOC_FAILURE);
300 return(NULL); 303 return(NULL);
301 } 304 }
302 strcpy(merged, filespec2); 305 strlcpy(merged, filespec2, len);
303 } 306 }
304 else 307 else
305 /* This part isn't as trivial as it looks. It assumes that 308 /* This part isn't as trivial as it looks. It assumes that
@@ -325,9 +328,9 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1,
325 ERR_R_MALLOC_FAILURE); 328 ERR_R_MALLOC_FAILURE);
326 return(NULL); 329 return(NULL);
327 } 330 }
328 strcpy(merged, filespec2); 331 strlcpy(merged, filespec2, len + 2);
329 merged[spec2len] = '/'; 332 merged[spec2len] = '/';
330 strcpy(&merged[spec2len + 1], filespec1); 333 strlcpy(&merged[spec2len + 1], filespec1, len + 1 - spec2len);
331 } 334 }
332 return(merged); 335 return(merged);
333 } 336 }