|
1 --- php-5.3.10/ext/standard/dl.c_orig Sun Jan 1 05:15:04 2012 |
|
2 +++ php-5.3.10/ext/standard/dl.c Wed Feb 8 11:25:26 2012 |
|
3 @@ -132,12 +132,30 @@ |
|
4 } |
|
5 libpath = estrdup(filename); |
|
6 } else if (extension_dir && extension_dir[0]) { |
|
7 - int extension_dir_len = strlen(extension_dir); |
|
8 + /* if extension_dir supports multiple paths, then look for the extension in each of them */ |
|
9 + static const char path_sep[] = { ZEND_PATHS_SEPARATOR, 0 }; |
|
10 + struct stat filetype; |
|
11 + char* extdir = NULL; |
|
12 + if ((extdir = strtok_r(extension_dir, path_sep, &extension_dir)) != NULL) { |
|
13 + do { |
|
14 + int extension_dir_len = strlen(extdir); |
|
15 + if (IS_SLASH(extdir[extension_dir_len-1])) { |
|
16 + spprintf(&libpath, 0, "%s%s", extdir, filename); |
|
17 + } else { |
|
18 + spprintf(&libpath, 0, "%s%c%s", extdir, DEFAULT_SLASH, filename); |
|
19 + } |
|
20 |
|
21 - if (IS_SLASH(extension_dir[extension_dir_len-1])) { |
|
22 - spprintf(&libpath, 0, "%s%s", extension_dir, filename); /* SAFE */ |
|
23 + if (stat(libpath, &filetype) == 0) { |
|
24 + break; |
|
25 + } |
|
26 + } while (extension_dir && (extdir = strtok_r(NULL, path_sep, &extension_dir)) != NULL); |
|
27 } else { |
|
28 - spprintf(&libpath, 0, "%s%c%s", extension_dir, DEFAULT_SLASH, filename); /* SAFE */ |
|
29 + int extension_dir_len = strlen(extension_dir); |
|
30 + if (IS_SLASH(extension_dir[extension_dir_len-1])) { |
|
31 + spprintf(&libpath, 0, "%s%s", extension_dir, filename); |
|
32 + } else { |
|
33 + spprintf(&libpath, 0, "%s%c%s", extension_dir, DEFAULT_SLASH, filename); |
|
34 + } |
|
35 } |
|
36 } else { |
|
37 return FAILURE; /* Not full path given or extension_dir is not set */ |