fields: use xml_node_text() for safe access to prefill nodes (#40320)

This commit is contained in:
Frédéric Péters 2020-03-02 11:12:04 +01:00
parent d2a25dc335
commit 1f3af36747
2 changed files with 13 additions and 2 deletions

View File

@ -622,3 +622,14 @@ def test_field_prefill():
f2 = FormDef.import_from_xml_tree(formdef_xml)
assert len(f2.fields) == len(formdef.fields)
assert f2.fields[0].prefill == {'type': 'string', 'value': 'plop'}
formdef.fields = [
fields.StringField(type='string', id=1, label='Bar', size='40',
prefill={'type': 'string', 'value': 'plop', 'locked': False})
]
formdef_xml_str = ET.tostring(formdef.export_to_xml())
formdef_xml_str = formdef_xml_str.replace(b'<value>plop</value>', b'')
formdef_xml = ET.fromstring(formdef_xml_str)
f2 = FormDef.import_from_xml_tree(formdef_xml)
assert len(f2.fields) == len(formdef.fields)
assert f2.fields[0].prefill == {'type': 'string', 'value': None}

View File

@ -326,10 +326,10 @@ class Field(object):
self.prefill = {}
if node is not None and node.findall('type'):
self.prefill = {
'type': force_str(node.find('type').text),
'type': xml_node_text(node.find('type')),
}
if self.prefill['type'] and self.prefill['type'] != 'none':
self.prefill['value'] = force_str(node.find('value').text)
self.prefill['value'] = xml_node_text(node.find('value'))
if xml_node_text(node.find('locked')) == 'True':
self.prefill['locked'] = True