Edgewall Software
Modify

Opened 11 years ago

Closed 11 years ago

#7816 closed defect (duplicate)

UnboundLocalError: local variable 'data' referenced before assignment

Reported by: ping95a@… Owned by: anonymous
Priority: high Milestone:
Component: general Version: 0.12dev
Severity: normal Keywords: genshi
Cc: Branch:
Release Notes:
API Changes:

Description

어떻게 재현할 것인가?

While doing a POST operation on /attachment/wiki/WikiStart/SNIPER-20080818_jey035.doc, Trac에서 내부적인 에러가 발생했습니다.

(여기에 추가적인 상세한 정보를 적어주십시오.)

요청 파라메터:

{'__FORM_TOKEN': u'af69e20cabd23fee1ee71a2f',
 'action': [u'delete', u'delete'],
 'path': u'WikiStart/SNIPER-20080818_jey035.doc',
 'realm': u'wiki'}

시스템 정보

Trac 0.12dev
Python 2.6 (r26:66714, Oct 20 2008, 13:55:25)
[GCC 4.1.0 20060304 (Red Hat 4.1.0-3)]
setuptools 0.6c9
SQLite 3.3.7
pysqlite 2.4.1
Genshi 0.6dev-r960
mod_python 3.3.1
Pygments 0.11.1
jQuery: 1.2.6

Python Traceback

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/site-packages/Trac-0.12dev-py2.6.egg/trac/web/main.py", line 456, in _dispatch_request
    dispatcher.dispatch(req)
  File "/usr/local/lib/python2.6/site-packages/Trac-0.12dev-py2.6.egg/trac/web/main.py", line 213, in dispatch
    resp = chosen_handler.process_request(req)
  File "/usr/local/lib/python2.6/site-packages/Trac-0.12dev-py2.6.egg/trac/attachment.py", line 404, in process_request
    return 'attachment.html', data, None
UnboundLocalError: local variable 'data' referenced before assignment

Attachments (0)

Change History (14)

comment:1 by Christian Boos, 11 years ago

Keywords: genshi added
Milestone: 0.12

'action': [u'delete', u'delete'], is the problem, should be 'action': u'delete'.

The request argument got duplicated somehow, can you post the html source of your attachment delete confirmation page?

Also, do you use any custom site.html template, containing py:matches? If so, post it here as well (suspecting something like #G254).

comment:2 by ping95a@…, 11 years ago

this is delete confirmation page source.

comment:3 by ping95a@…, 11 years ago

this is delete confirmation page source.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  
  

  


  

  <head>
    <title>
      첨부파일 – sniper
    </title>
        <link rel="search" href="/trac/sniper/search" />
        <link rel="help" href="/trac/sniper/wiki/TracGuide" />
        <link rel="up" href="/trac/sniper/wiki/WikiStart" title="WikiStart" />
        <link rel="start" href="/trac/sniper/wiki" />
        <link rel="stylesheet" href="/trac/sniper/chrome/common/css/trac.css" type="text/css" /><link rel="stylesheet" href="/trac/sniper/chrome/common/css/code.css" type="text/css" /><link rel="stylesheet" href="/trac/sniper/chrome/tracwysiwyg/wysiwyg.css" type="text/css" />
        <link rel="shortcut icon" href="/trac/sniper/chrome/common/trac.ico" type="image/x-icon" />
        <link rel="icon" href="/trac/sniper/chrome/common/trac.ico" type="image/x-icon" />
      <link type="application/opensearchdescription+xml" rel="search" href="/trac/sniper/search/opensearch" title="Search sniper" />
    <script type="text/javascript" src="/trac/sniper/chrome/common/js/jquery.js"></script><script type="text/javascript" src="/trac/sniper/chrome/common/js/trac.js"></script><script type="text/javascript" src="/trac/sniper/chrome/common/js/search.js"></script><script type="text/javascript" src="/trac/sniper/chrome/tracwysiwyg/wysiwyg.js"></script><script type="text/javascript" src="/trac/sniper/chrome/tracwysiwyg/wysiwyg-load.js"></script>
    <!--[if lt IE 7]>
    <script type="text/javascript" src="/trac/sniper/chrome/common/js/ie_pre7_hacks.js"></script>
    <![endif]-->
  </head>
  <body>
    <div id="banner">
      <div id="header">
        <a id="logo" href="/"><img src="/images/issue_logo01.gif" alt="(please configure the [header_logo] section in trac.ini)" /></a>
      </div>
      <form id="search" action="/trac/sniper/search" method="get">
        <div>
          <label for="proj-search">검색:</label>
          <input type="text" id="proj-search" name="q" size="18" value="" />
          <input type="submit" value="검색" />
        </div>
      </form>
      <div id="metanav" class="nav">
    <ul>
      <li class="first">hyjung로 로그인됨</li><li><a href="/trac/sniper/logout">로그아웃</a></li><li><a href="/trac/sniper/prefs">설정</a></li><li><a href="/trac/sniper/wiki/TracGuide">도움말</a></li><li class="last"><a href="/trac/sniper/about">Trac에 대해서</a></li>
    </ul>
  </div>
    </div>
    <div id="mainnav" class="nav">
    <ul>
      <li class="first active"><a href="/trac/sniper/wiki">위키</a></li><li><a href="/trac/sniper/timeline">시간이력</a></li><li><a href="/trac/sniper/roadmap">로드맵</a></li><li><a href="/trac/sniper/report">티켓 보기</a></li><li><a href="/trac/sniper/newticket">새로운 티켓</a></li><li><a href="/trac/sniper/search">검색</a></li><li class="last"><a href="/trac/sniper/admin" title="관리">관리</a></li>
    </ul>
  </div>
    <div id="main">
      <div id="ctxtnav" class="nav">
        <h2>컨텍스트 네비게이션</h2>
          <ul>
            <li class="first last"><a href="/trac/sniper/wiki/WikiStart">WikiStart로 돌아가기</a></li>
          </ul>
        <hr />
      </div>
    <div id="content" class="attachment">
        <h1><a href="/trac/sniper/wiki/WikiStart">WikiStart</a>: SNIPER-20080818_jey035.doc</h1>
        <p><strong>이 첨부파일을 정말로 삭제하시겠습니까?</strong><br />
          이 작업은 되돌릴 수 없는 작업입니다.</p>
        <div class="buttons">
          <form method="post" action=""><div><input type="hidden" name="__FORM_TOKEN" value="465130468323fe5ac6bad49a" /></div>
            <div id="delete">
              <input type="hidden" name="action" value="delete" />
              <input type="submit" name="cancel" value="취소" />
              <input type="submit" value="첨부파일 삭제" />
            </div>
          </form>
        </div>
    </div>
    </div>
    <div id="footer" lang="en" xml:lang="en"><hr />
      <a id="tracpowered" href="http://trac.edgewall.org/"><img src="/trac/sniper/chrome/common/trac_logo_mini.png" height="30" width="107" alt="Trac Powered" /></a>
      <p class="left">
        Powered by <a href="/trac/sniper/about"><strong>Trac 0.12dev</strong></a><br />
        By <a href="http://www.edgewall.org/">Edgewall Software</a>.
      </p>
      <p class="right">Visit the Trac open source project at<br /><a href="http://trac.edgewall.org/">http://trac.edgewall.org/</a></p>
    </div>
  </body>
</html>

comment:4 by Christian Boos, 11 years ago

Thanks, there's nothing wrong on the .html level, apparently.

What web browser did you use? Is the problem reproducible (i.e. does it happen always, for every attachment)? Does the problem happen with different browser?

What revision of 0.12dev are you using? Does an upgrade to the latest trunk solve the problem?

comment:5 by ping95a@…, 11 years ago

Resolution: fixed
Status: newclosed

I solved it by modify "attachment.py" source file. but it will be not collect solution. As cboos mentioned, the problem was duplicated agument.

below is part of my modified source. it's simple.

    358     def process_request(self, req):
    359         parent_id = None
    360         parent_realm = req.args.get('realm')
    361         path = req.args.get('path')
    362         filename = None
    363
    364         if not parent_realm or not path:
    365             raise HTTPBadRequest(_('Bad request'))
    366
    367         parent_realm = Resource(parent_realm)
    368         action = req.args.get('action', 'view')
    369         if (action == 'new') or (action[0] == 'new') :
    370             parent_id = path.rstrip('/')
    371         else:
    372             segments = path.split('/')
    373             parent_id = '/'.join(segments[:-1])
    374             filename = len(segments) > 1 and segments[-1]
    375
    376         parent = parent_realm(id=parent_id)
    377
    378         # Link the attachment page to parent resource
    379         parent_name = get_resource_name(self.env, parent)
    380         parent_url = get_resource_url(self.env, parent, req.href)
    381         add_link(req, 'up', parent_url, parent_name)
    382         add_ctxtnav(req, _('Back to %(parent)s', parent=parent_name),
    383                     parent_url)
    384
    385         if (action != 'new') and (action[0] != 'new')  and not filename:
    386             # there's a trailing '/', show the list
    387             return self._render_list(req, parent)
    388
    389         attachment = Attachment(self.env, parent.child('attachment', filename))
    390
    391         if req.method == 'POST':
    392             if (action == 'new') or (action[0] == 'new'):
    393                 self._do_save(req, attachment)
    394             elif (action == 'delete') or (action[0] == 'delete'):
    395                 self._do_delete(req, attachment)
    396         elif (action == 'delete') or (action[0] == 'delete'):
    397             data = self._render_confirm_delete(req, attachment)
    398         elif (action == 'new') or (action[0] == 'new') :
    399             data = self._render_form(req, attachment)
    400         else:
    401             data = self._render_view(req, attachment)
    402         add_stylesheet(req, 'common/css/code.css')
    403
    404         return 'attachment.html', data, None
    405
    406     # IWikiSyntaxProvider methods

comment:6 by Christian Boos, 11 years ago

Well no, the fix is not to cope with multiple values for this parameter - there shouldn't be multiple values, and we should understand why there are in your situation. Please answer my questions from comment:4.

in reply to:  6 comment:7 by anonymous, 11 years ago

Thanks, there's nothing wrong on the .html level, apparently.

What web browser did you use? Is the problem reproducible (i.e. does it happen >>always, for every attachment)? Does the problem happen with different browser?

What revision of 0.12dev are you using? Does an upgrade to the latest trunk solve the problem?

Replying to cboos:

Well no, the fix is not to cope with multiple values for this parameter - there shouldn't be multiple values, and we should understand why there are in your situation. Please answer my questions from comment:4.

I'm sorry about change mode. I tested by IE7, and Google Chrome. but all of them showed same error. And I was captured packet by ethereal. I think that this error is not sending source. It may will be receiveing script error. just like not buffer clear. Just my think.

comment:8 by ping95a@…, 11 years ago

Resolution: fixed
Status: closedreopened

comment:9 by Remy Blank, 11 years ago

Resolution: duplicate
Status: reopenedclosed

This is due to a change in the cgi module in Python 2.6, and hence a duplicate of #7876.

comment:10 by Remy Blank, 11 years ago

Milestone: 0.12

comment:11 by anonymous, 11 years ago

Owner: set to anonymous

comment:12 by anonymous, 11 years ago

Resolution: duplicate
Status: closedreopened

comment:13 by anonymous, 11 years ago

Status: reopenednew

comment:14 by Remy Blank, 11 years ago

Resolution: duplicate
Status: newclosed

Please stop that.

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain anonymous.
The resolution will be deleted. Next status will be 'reopened'.
to as closed The owner will be changed from anonymous to the specified user.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.