diff options
author | Senthil Kumaran <senthil@uthcode.com> | 2014-01-12 06:20:16 (GMT) |
---|---|---|
committer | Senthil Kumaran <senthil@uthcode.com> | 2014-01-12 06:20:16 (GMT) |
commit | b4cbb92fbe6290c3574e73288de9e9cbb60b7688 (patch) | |
tree | 9714adc7666487a741be49eb94bb81bfb9b87365 /Lib/cgi.py | |
parent | 5636eb7b93cb1364fb099f77fc43de75aef658fc (diff) | |
download | cpython-b4cbb92fbe6290c3574e73288de9e9cbb60b7688.zip cpython-b4cbb92fbe6290c3574e73288de9e9cbb60b7688.tar.gz cpython-b4cbb92fbe6290c3574e73288de9e9cbb60b7688.tar.bz2 |
Issue #19092 - Raise a correct exception when cgi.FieldStorage is given an
invalid file-obj. Also use __bool__ to determine the bool of the FieldStorage
object.
Diffstat (limited to 'Lib/cgi.py')
-rwxr-xr-x | Lib/cgi.py | 14 |
1 files changed, 12 insertions, 2 deletions
@@ -32,10 +32,12 @@ __version__ = "2.6" # ======= from io import StringIO, BytesIO, TextIOWrapper +from collections import Mapping import sys import os import urllib.parse from email.parser import FeedParser +from email.message import Message from warnings import warn import html import locale @@ -472,18 +474,24 @@ class FieldStorage: self.qs_on_post = environ['QUERY_STRING'] if 'CONTENT_LENGTH' in environ: headers['content-length'] = environ['CONTENT_LENGTH'] + else: + if not (isinstance(headers, (Mapping, Message))): + raise TypeError("headers must be mapping or an instance of " + "email.message.Message") + self.headers = headers if fp is None: self.fp = sys.stdin.buffer # self.fp.read() must return bytes elif isinstance(fp, TextIOWrapper): self.fp = fp.buffer else: + if not (hasattr(fp, 'read') and hasattr(fp, 'readline')): + raise TypeError("fp must be file pointer") self.fp = fp self.encoding = encoding self.errors = errors - self.headers = headers if not isinstance(outerboundary, bytes): raise TypeError('outerboundary must be bytes, not %s' % type(outerboundary).__name__) @@ -636,7 +644,9 @@ class FieldStorage: """Dictionary style len(x) support.""" return len(self.keys()) - def __nonzero__(self): + def __bool__(self): + if self.list is None: + raise TypeError("Cannot be converted to bool.") return bool(self.list) def read_urlencoded(self): |