Exemple #1
0
 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
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #10
0
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
Exemple #11
0
 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