marc 98/07/13 00:06:17
Modified: src/os/win32 util_win32.c Log: Add some comments and error checking code to avoid wild memcpy. This doesn't fix any of the code, just makes it hurt less. Major bogosity here. Revision Changes Path 1.22 +9 -5 apache-1.3/src/os/win32/util_win32.c Index: util_win32.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/os/win32/util_win32.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- util_win32.c 1998/07/13 03:02:16 1.21 +++ util_win32.c 1998/07/13 07:06:16 1.22 @@ -62,6 +62,8 @@ char b2[_MAX_PATH]; char b3[_MAX_PATH]; ap_assert(szFilePart > buf+3); + /* avoid SEGVs on things like "Directory *" */ + ap_assert(s >= szFile && "this is a known bug"); memcpy(b3,szFile,s-szFile); b3[s-szFile]='\0'; @@ -94,9 +96,9 @@ } } -/* UNC requires backslashes, hence the conversion before canonicalisation. Not sure how - * many backslashes (could be that \\machine\share\some/path/is/ok for example). For now, do - * them all. +/* UNC requires backslashes, hence the conversion before canonicalisation. + * Not sure how * many backslashes (could be that + * \\machine\share\some/path/is/ok for example). For now, do them all. */ API_EXPORT(char *) ap_os_canonical_filename(pool *pPool, const char *szFile) { @@ -127,6 +129,7 @@ // Finally, a trailing slash(es) screws thing, so blow them away for(nSlashes=0 ; d > b2 && d[-1] == '\\' ; --d,++nSlashes) ; + /* XXXX this breaks '/' and 'c:/' cases */ *d='\0'; sub_canonical_filename(buf, sizeof buf, b2); @@ -142,8 +145,9 @@ /* Win95 doesn't like trailing /s. NT and Unix don't mind. This works * around the problem. - * Errr... except if it is UNC and we are referring to the root of the UNC, we MUST have - * a trailing \ and we can't use /s. Jeez. Not sure if this refers to all UNCs or just roots, + * Errr... except if it is UNC and we are referring to the root of + * the UNC, we MUST have a trailing \ and we can't use /s. Jeez. + * Not sure if this refers to all UNCs or just roots, * but I'm going to fix it for all cases for now. (Ben) */