pcs         99/01/30 11:19:25

  Modified:    src      CHANGES
               src/os/win32 util_win32.c
  Log:
  Win32: The filename validity checker now allows "COM" but refuses access
  to "COM1" through "COM4". This allows filenames such as "com.name" to be
  served. If was supposed to work like this but a bug meant that the "COM1"
  invalid filename was matching "COM". Similarly the check for "LPT1" would
  have denied access to filenames with a "LPT" segment.
  PR: 3769
  
  Revision  Changes    Path
  1.1228    +4 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1227
  retrieving revision 1.1228
  diff -u -r1.1227 -r1.1228
  --- CHANGES   1999/01/28 18:27:17     1.1227
  +++ CHANGES   1999/01/30 19:19:23     1.1228
  @@ -1,5 +1,9 @@
   Changes with Apache 1.3.5
   
  +  *) Win32: The filename validity checker now allows "COM" but refuses 
  +     access to "COM1" through "COM4". This allows filenames such
  +     as "com.name" to be served. [Paul Sutton] PR#3769.
  +
     *) BS2000: Adapt to the new ufork() system call interface which will
        make subtasking easier on the OSD/POSIX mainframe environment.
        [Martin Kraemer]
  
  
  
  1.32      +5 -4      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.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- util_win32.c      1999/01/05 08:17:32     1.31
  +++ util_win32.c      1999/01/30 19:19:25     1.32
  @@ -571,7 +571,7 @@
   API_EXPORT(int) ap_os_is_filename_valid(const char *file)
   {
       const char *segstart;
  -    char seglength;
  +    unsigned int seglength;
       const char *pos;
       static const char * const invalid_characters = "?\"<>*|:";
       static const char * const invalid_filenames[] = { 
  @@ -621,8 +621,8 @@
       }
   
       while (*pos) {
  -     int idx;
  -     int baselength;
  +     unsigned int idx;
  +     unsigned int baselength;
   
        while (*pos == '/' || *pos == '\\') {
            pos++;
  @@ -665,7 +665,8 @@
         * if it does not include any dot characters). */
        if (baselength == 3 || baselength == 4) {
            for (idx = 0; invalid_filenames[idx]; idx++) {
  -             if (!strnicmp(invalid_filenames[idx], segstart, baselength)) {
  +             if (strlen(invalid_filenames[idx]) == baselength &&
  +                 !strnicmp(invalid_filenames[idx], segstart, baselength)) {
                    return 0;
                }
            }
  
  
  

Reply via email to