Modify

Opened 18 months ago

#11056 new defect

TypeError: execv() arg 2 must contain only strings

Reported by: cips Owned by: hvr
Priority: normal Component: GitPlugin
Severity: normal Keywords: umlaute
Cc: Trac Release: 0.12

Description

How to Reproduce

While doing a GET operation on /browser/Evaluation/Fragebögen, Trac issued an internal error.

When browsing my git sources, the system call to the git executable fails in subprocess.py, due to the Umlaut in the file name, which is passed as a parameter.

This error first appeared when updating from Debian squeeze to Debian wheezy, which updated trac to version 0.12.3-1 and trac-git to version 0.12.0.5+722342e-1.

I was able to avoid the exception by modifying PyGIT.py line 729 (def get_historian(self, sha, base_path):):

original:

                                        sha, '--', base_path)]

modification:

                                        sha, '--', base_path.encode('utf-8'))]

Request parameters:

{'path': u'/Evaluation/Frageb\xf6gen'}

User agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0

System Information

Trac 0.12.3
Babel 0.9.6
Docutils 0.8.1
Genshi 0.6
GIT 1.7.10.4
mod_python 3.3.1
Pygments 1.5
pysqlite 2.6.0
Python 2.7.3 (default, Jan 2 2013, 17:14:22)
[GCC 4.7.2]
pytz 2012c
setuptools 0.6
SQLite 3.7.13
Subversion 1.6.17 (r1128011)
jQuery 1.7.2

Enabled Plugins

TracGit 0.12.0.5dev

Python Traceback

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/trac/web/main.py", line 522, in _dispatch_request
    dispatcher.dispatch(req)
  File "/usr/lib/python2.7/dist-packages/trac/web/main.py", line 243, in dispatch
    resp = chosen_handler.process_request(req)
  File "/usr/lib/python2.7/dist-packages/trac/versioncontrol/web_ui/browser.py", line 390, in process_request
    dir_data = self._render_dir(req, repos, node, rev, order, desc)
  File "/usr/lib/python2.7/dist-packages/trac/versioncontrol/web_ui/browser.py", line 552, in _render_dir
    entries = [entry(n) for n in node.get_entries()
  File "/usr/lib/python2.7/dist-packages/tracext/git/git_fs.py", line 544, in get_entries
    yield GitNode(self.repos, ent[-1], self.rev, self.log, ent, historian)
  File "/usr/lib/python2.7/dist-packages/tracext/git/git_fs.py", line 496, in __init__
    rev = repos.git.last_change(rev, p, historian)
  File "/usr/lib/python2.7/dist-packages/tracext/git/PyGIT.py", line 767, in last_change
    return historian(path)
  File "/usr/lib/python2.7/dist-packages/tracext/git/PyGIT.py", line 757, in historian
    return gen.next()
  File "/usr/lib/python2.7/dist-packages/tracext/git/PyGIT.py", line 728, in name_status_gen
    sha, '--', base_path)]
  File "/usr/lib/python2.7/dist-packages/tracext/git/PyGIT.py", line 75, in log_pipe
    return self.__pipe('log', *cmd_args, stdout=PIPE)
  File "/usr/lib/python2.7/dist-packages/tracext/git/PyGIT.py", line 57, in __pipe
    close_fds=True, **kw)
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
    raise child_exception
TypeError: execv() arg 2 must contain only strings

Attachments (0)

Change History (0)

Add Comment

Modify Ticket

Action
as new .
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.