Changeset 756:8745488a7e28 in hatta-dev for hatta.py


Ignore:
Timestamp:
02/10/10 21:36:13 (2 years ago)
Author:
sheep@…
Branch:
default
Message:

make sure to escape Windows special filenames and unix dotfiles

File:
1 edited

Legend:

Unmodified
Added
Removed
  • hatta.py

    r755 r756  
    383383        return path 
    384384 
    385  
    386385    def _check_path(self, path): 
    387386        """ 
     
    391390        abspath = os.path.abspath(path) 
    392391        if os.path.islink(path) or os.path.isdir(path): 
    393             raise werkzeug.exceptions.Forbidden(_(u"Can't use symbolic links or directories as pages")) 
     392            raise werkzeug.exceptions.Forbidden( 
     393                _(u"Can't use symbolic links or directories as pages")) 
    394394        if not abspath.startswith(self.path): 
    395             raise werkzeug.exceptions.Forbidden(_(u"Can't read or write outside of the pages repository")) 
    396  
     395            raise werkzeug.exceptions.Forbidden( 
     396                _(u"Can't read or write outside of the pages repository")) 
    397397 
    398398    def _file_path(self, title): 
     
    401401    def _title_to_file(self, title): 
    402402        title = unicode(title).strip() 
    403         return os.path.join(self.repo_prefix, 
    404                             werkzeug.url_quote(title, safe='')) 
    405  
    406     def _file_to_title(self, filename): 
    407         assert filename.startswith(self.repo_prefix) 
    408         name = filename[len(self.repo_prefix):].strip('/') 
     403        filename = werkzeug.url_quote(title, safe='') 
     404        # Escape special windows filenames and dot files 
     405        _windows_device_files = ('CON', 'AUX', 'COM1', 'COM2', 'COM3', 
     406                                 'COM4', 'LPT1', 'LPT2', 'LPT3', 'PRN', 
     407                                 'NUL') 
     408        if (filename.split('.')[0].upper() in _windows_device_files or 
     409            filename.startswith('_') or filename.startswith('.')): 
     410            filename = '_' + filename 
     411        return os.path.join(self.repo_prefix, filename) 
     412 
     413    def _file_to_title(self, filepath): 
     414        if not filepath.startswith(self.repo_prefix): 
     415            raise werkzeug.exceptions.Forbidden( 
     416                _(u"Can't read or write outside of the pages repository")) 
     417        name = filepath[len(self.repo_prefix):].strip('/') 
     418        # Unescape special windows filenames and dot files 
     419        if name.startswith('_') and len(name)>1: 
     420            name = name[1:] 
    409421        return werkzeug.url_unquote(name) 
    410422 
Note: See TracChangeset for help on using the changeset viewer.