Here is patch for basename() function, which prevents possible
memory access violation:
=========cut=========
--- string.c Thu May 13 20:44:32 2004
+++ string_basename.c Mon Jun 14 20:43:33 2004
@@ -1079,9 +1079,9 @@
/* strip trailing slashes */
- while (*c == '/'
+ while (c >= s && *c == '/'
#ifdef PHP_WIN32
- || (*c == '\\' && !IsDBCSLeadByte(*(c-1)))
+ || (c > s && *c == '\\' && !IsDBCSLeadByte(*(c-1)))
#endif
)
c--;
@@ -1092,10 +1092,10 @@
}
#ifdef PHP_WIN32
- if ((c = strrchr(s, '/')) || ((c = strrchr(s, '\\')) &&
!IsDBCSLeadByte(*(c-1)))) {
+ if ((c = strrchr(s, '/')) || ((c = strrchr(s, '\\')) && c > s &&
!IsDBCSLeadByte(*(c-1)))) {
if (*c == '/') {
char *c2 = strrchr(s, '\\');
- if (c2 && !IsDBCSLeadByte(*(c2-1)) && c2 > c) {
+ if (c2 && c2 > s && !IsDBCSLeadByte(*(c2-1)) && c2 > c) {
c = c2;
}
}
=========cut==========