#15018 closed (fixed)
LimitedStream.readline deals parameter not correct — at Version 1
Reported by: | xjdrew | Owned by: | nobody |
---|---|---|---|
Component: | Core (Other) | Version: | dev |
Severity: | Keywords: | blocker, regression | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I read the code at (http://code.djangoproject.com/browser/django/trunk/django/core/handlers/wsgi.py), LimitedStream.readline function maybe go wrong when the situation meet criteria below:
- '\n' not in self.buffer
- and size is not None
- and len(self.buffer) > len(self.buffer)
it will go to ln102, and leads the parameter of LimitedStream._read_limited is negative, and it will be bypassed to ln82.
I don't read the implementation of self.stream.read, so i'm not sure if it will cause damage.
Please tell me if I misunderstand the code, thanks.
below is the code:
98 def readline(self, size=None): 99 while '\n' not in self.buffer or \ 100 (size is not None and len(self.buffer) < size): 101 if size: 102 chunk = self._read_limited(size - len(self.buffer)) 103 else: 104 chunk = self._read_limited() 105 if not chunk: 106 break 107 self.buffer += chunk 108 sio = StringIO(self.buffer) 109 if size: 110 line = sio.readline(size) 111 else: 112 line = sio.readline() 113 self.buffer = sio.read() 114 return line
77 def _read_limited(self, size=None): 78 if size is None or size > self.remaining: 79 size = self.remaining 80 if size == 0: 81 return '' 82 result = self.stream.read(size) 83 self.remaining -= len(result) 84 return result
best regards,
Drew
Change History (1)
comment:1 by , 14 years ago
Description: | modified (diff) |
---|---|
Resolution: | → worksforme |
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Your point 3 doesn't make any sense, and I can't work out what it might be a typo for.
If you want to prove there is a problem here, write a formal test case. There are existing tests for LimitedStream covering a wide range of potential use cases; if you can encode your use case as a test that fails, please provide that test and reopen.