def test_parse_params(self): i = 0 for (instr, expected_pd, expected_msgs, delim) in [ ('foo=bar', { 'foo': 'bar' }, [], ';'), ('foo="bar"', { 'foo': 'bar' }, [], ';'), ('foo="bar"; baz=bat', { 'foo': 'bar', 'baz': 'bat' }, [], ';'), ('foo="bar"; baz="b=t"; bam="boom"', { 'foo': 'bar', 'baz': 'b=t', 'bam': 'boom' }, [], ';'), (r'foo="b\"ar"', { 'foo': 'b"ar' }, [], ';'), (r'foo=bar; foo=baz', { 'foo': 'baz' }, [rs.PARAM_REPEATS], ';'), ('foo=bar; baz="b;at"', { 'foo': 'bar', 'baz': "b;at" }, [], ';'), ('foo=bar, baz="bat"', { 'foo': 'bar', 'baz': "bat" }, [], ','), ('foo=bar, baz="b,at"', { 'foo': 'bar', 'baz': "b,at" }, [], ','), ("foo=bar; baz='bat'", { 'foo': 'bar', 'baz': "'bat'" }, [rs.PARAM_SINGLE_QUOTED], ';'), ("foo*=\"UTF-8''a%cc%88.txt\"", { 'foo*': u'a\u0308.txt' }, [rs.PARAM_STAR_QUOTED], ';'), ("foo*=''a%cc%88.txt", {}, [rs.PARAM_STAR_NOCHARSET], ';'), ("foo*=utf-16''a%cc%88.txt", {}, [rs.PARAM_STAR_CHARSET], ';'), ("nostar*=utf-8''a%cc%88.txt", {}, [rs.PARAM_STAR_BAD], ';'), ("NOstar*=utf-8''a%cc%88.txt", {}, [rs.PARAM_STAR_BAD], ';') ]: self.red.__init__() param_dict = rh.parse_params(self.red, 'test', instr, ['nostar'], delim) diff = set([n.__name__ for n in expected_msgs ]).symmetric_difference(set(self.red.msg_classes)) self.assertEqual(len(diff), 0, "[%s] Mismatched messages: %s" % (i, diff)) self.assertEqual( expected_pd, param_dict, "[%s] %s != %s" % (i, str(expected_pd), str(param_dict))) i += 1
def parse(subject, value, red): try: media_type, params = value.split(";", 1) except ValueError: media_type, params = value, "" media_type = media_type.lower() param_dict = rh.parse_params(red, subject, params, ["charset"]) # TODO: check charset to see if it's known return (media_type, param_dict)
def parse(subject, value, red): try: media_type, params = value.split(";", 1) except ValueError: media_type, params = value, '' media_type = media_type.lower() param_dict = rh.parse_params(red, subject, params, ['charset']) # TODO: check charset to see if it's known return (media_type, param_dict)
def parse(subject, value, red): try: coding, params = value.split(";", 1) except ValueError: coding, params = value, "" coding = coding.lower() param_dict = rh.parse_params(red, subject, params, True) if param_dict: red.set_message(subject, rs.TRANSFER_CODING_PARAM) return coding
def parse(subject, value, red): try: protect, param_str = value.split(';', 1) except ValueError: protect, param_str = value, "" protect = int(protect) params = rh.parse_params(red, subject, param_str, True) if protect == 0: red.set_message(subject, rs.XSS_PROTECTION_OFF) else: # 1 if params.get('mode', None) == "block": red.set_message(subject, rs.XSS_PROTECTION_BLOCK) else: red.set_message(subject, rs.XSS_PROTECTION_ON) return protect, params
def parse(subject, value, red): try: disposition, params = value.split(";", 1) except ValueError: disposition, params = value, '' disposition = disposition.lower() param_dict = rh.parse_params(red, subject, params) if disposition not in ['inline', 'attachment']: red.set_message(subject, rs.DISPOSITION_UNKNOWN, disposition=e(disposition)) if not param_dict.has_key('filename'): red.set_message(subject, rs.DISPOSITION_OMITS_FILENAME) if "%" in param_dict.get('filename', ''): red.set_message(subject, rs.DISPOSITION_FILENAME_PERCENT) if "/" in param_dict.get('filename', '') or \ r"\\" in param_dict.get('filename*', ''): red.set_message(subject, rs.DISPOSITION_FILENAME_PATH_CHAR) return disposition, param_dict
def parse(subject, value, red): try: disposition, params = value.split(";", 1) except ValueError: disposition, params = value, '' disposition = disposition.lower() param_dict = rh.parse_params(red, subject, params) if disposition not in ['inline', 'attachment']: red.set_message(subject, rs.DISPOSITION_UNKNOWN, disposition=e(disposition) ) if not param_dict.has_key('filename'): red.set_message(subject, rs.DISPOSITION_OMITS_FILENAME) if "%" in param_dict.get('filename', ''): red.set_message(subject, rs.DISPOSITION_FILENAME_PERCENT) if "/" in param_dict.get('filename', '') or \ r"\\" in param_dict.get('filename*', ''): red.set_message(subject, rs.DISPOSITION_FILENAME_PATH_CHAR) return disposition, param_dict
def parse(subject, value, red): try: link, params = value.split(";", 1) except ValueError: link, params = value, '' link = link[1:-1] # trim the angle brackets param_dict = rh.parse_params(red, subject, params, ['rel', 'rev', 'anchor', 'hreflang', 'type', 'media']) if param_dict.has_key('rel'): # relation_types pass # TODO: check relation type if param_dict.has_key('rev'): red.set_message(subject, rs.LINK_REV, link=link, rev=param_dict['rev']) if param_dict.has_key('anchor'): # URI-Reference if not re.match(r"^\s*%s\s*$" % syntax.URI_reference, param_dict['anchor'], re.VERBOSE): red.set_message(subject, rs.LINK_BAD_ANCHOR, link=link, anchor=param_dict['anchor']) # TODO: check media-type in 'type' # TODO: check language tag in 'hreflang' return link, param_dict
def test_parse_params(self): i = 0 for (instr, expected_pd, expected_msgs, delim) in [ ('foo=bar', {'foo': 'bar'}, [], ';'), ('foo="bar"', {'foo': 'bar'}, [], ';'), ('foo="bar"; baz=bat', {'foo': 'bar', 'baz': 'bat'}, [], ';'), ('foo="bar"; baz="b=t"; bam="boom"', {'foo': 'bar', 'baz': 'b=t', 'bam': 'boom'}, [], ';' ), (r'foo="b\"ar"', {'foo': 'b"ar'}, [], ';'), (r'foo=bar; foo=baz', {'foo': 'baz'}, [rs.PARAM_REPEATS], ';' ), ('foo=bar; baz="b;at"', {'foo': 'bar', 'baz': "b;at"}, [], ';' ), ('foo=bar, baz="bat"', {'foo': 'bar', 'baz': "bat"}, [], ',' ), ('foo=bar, baz="b,at"', {'foo': 'bar', 'baz': "b,at"}, [], ',' ), ("foo=bar; baz='bat'", {'foo': 'bar', 'baz': "'bat'"}, [rs.PARAM_SINGLE_QUOTED], ';' ), ("foo*=\"UTF-8''a%cc%88.txt\"", {'foo*': u'a\u0308.txt'}, [rs.PARAM_STAR_QUOTED], ';' ), ("foo*=''a%cc%88.txt", {}, [rs.PARAM_STAR_NOCHARSET], ';' ), ("foo*=utf-16''a%cc%88.txt", {}, [rs.PARAM_STAR_CHARSET], ';' ), ("nostar*=utf-8''a%cc%88.txt", {}, [rs.PARAM_STAR_BAD], ';' ), ("NOstar*=utf-8''a%cc%88.txt", {}, [rs.PARAM_STAR_BAD], ';' ) ]: self.red.__init__() param_dict = rh.parse_params( self.red, 'test', instr, ['nostar'], delim ) diff = set( [n.__name__ for n in expected_msgs]).symmetric_difference( set(self.red.msg_classes) ) self.assertEqual(len(diff), 0, "[%s] Mismatched messages: %s" % (i, diff) ) self.assertEqual(expected_pd, param_dict, "[%s] %s != %s" % (i, str(expected_pd), str(param_dict))) i += 1