Merge branch 'issue184' into devel
This commit is contained in:
commit
03d1553363
3 changed files with 27 additions and 7 deletions
|
|
@ -2631,19 +2631,22 @@ class XMLBox(Jp2kBox):
|
||||||
read_buffer = fptr.read(num_bytes)
|
read_buffer = fptr.read(num_bytes)
|
||||||
try:
|
try:
|
||||||
text = read_buffer.decode('utf-8')
|
text = read_buffer.decode('utf-8')
|
||||||
except UnicodeDecodeError as ude:
|
except UnicodeDecodeError as err:
|
||||||
# Possibly bad string of bytes to begin with.
|
# Possibly bad string of bytes to begin with.
|
||||||
# Try to search for <?xml and go from there.
|
# Try to search for <?xml and go from there.
|
||||||
decl_start = read_buffer.find(b'<?xml')
|
decl_start = read_buffer.find(b'<?xml')
|
||||||
if decl_start > -1:
|
if decl_start <= -1:
|
||||||
text = read_buffer[decl_start:].decode('utf-8')
|
msg = 'A problem was encountered while parsing an XML box:'
|
||||||
else:
|
msg += '\n\n\t"{0}"\n\nNo XML was retrieved.'
|
||||||
raise
|
warnings.warn(msg.format(str(err)))
|
||||||
|
return XMLBox(xml=None, length=length, offset=offset)
|
||||||
|
|
||||||
|
text = read_buffer[decl_start:].decode('utf-8')
|
||||||
|
|
||||||
# Let the user know that the XML box was problematic.
|
# Let the user know that the XML box was problematic.
|
||||||
msg = 'A UnicodeDecodeError was encountered parsing an XML box at '
|
msg = 'A UnicodeDecodeError was encountered parsing an XML box at '
|
||||||
msg += 'byte position {0} ({1}), but the XML was still recovered.'
|
msg += 'byte position {0} ({1}), but the XML was still recovered.'
|
||||||
msg = msg.format(offset, ude.reason)
|
msg = msg.format(offset, err.reason)
|
||||||
warnings.warn(msg, UserWarning)
|
warnings.warn(msg, UserWarning)
|
||||||
|
|
||||||
# Strip out any trailing nulls, as they can foul up XML parsing.
|
# Strip out any trailing nulls, as they can foul up XML parsing.
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ class TestCodestream(unittest.TestCase):
|
||||||
Jp2k(filename)
|
Jp2k(filename)
|
||||||
else:
|
else:
|
||||||
with self.assertWarns(UserWarning):
|
with self.assertWarns(UserWarning):
|
||||||
Jp2k(jfile)
|
Jp2k(filename)
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(OPJ_DATA_ROOT is None,
|
@unittest.skipIf(OPJ_DATA_ROOT is None,
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ from glymur.jp2box import ColourSpecificationBox, ContiguousCodestreamBox
|
||||||
from glymur.jp2box import FileTypeBox, ImageHeaderBox, JP2HeaderBox
|
from glymur.jp2box import FileTypeBox, ImageHeaderBox, JP2HeaderBox
|
||||||
from glymur.jp2box import JPEG2000SignatureBox
|
from glymur.jp2box import JPEG2000SignatureBox
|
||||||
|
|
||||||
|
from .fixtures import OPJ_DATA_ROOT, opj_data_file
|
||||||
|
|
||||||
@unittest.skipIf(os.name == "nt", "Temporary file issue on window.")
|
@unittest.skipIf(os.name == "nt", "Temporary file issue on window.")
|
||||||
class TestXML(unittest.TestCase):
|
class TestXML(unittest.TestCase):
|
||||||
|
|
@ -93,6 +94,22 @@ class TestXML(unittest.TestCase):
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
os.unlink(self.xmlfile)
|
os.unlink(self.xmlfile)
|
||||||
|
|
||||||
|
def test_invalid_utf8(self):
|
||||||
|
"""Bad byte sequence that cannot be parsed."""
|
||||||
|
filename = opj_data_file(os.path.join('input',
|
||||||
|
'nonregression',
|
||||||
|
'26ccf3651020967f7778238ef5af08af.SIGFPE.d25.527.jp2'))
|
||||||
|
if sys.hexversion < 0x03000000:
|
||||||
|
with warnings.catch_warnings():
|
||||||
|
warnings.simplefilter("ignore")
|
||||||
|
jp2 = Jp2k(filename)
|
||||||
|
else:
|
||||||
|
with self.assertWarns(UserWarning):
|
||||||
|
jp2 = Jp2k(filename)
|
||||||
|
|
||||||
|
self.assertIsNone(jp2.box[3].box[1].box[1].xml)
|
||||||
|
|
||||||
|
|
||||||
def test_negative_file_and_xml(self):
|
def test_negative_file_and_xml(self):
|
||||||
"""The XML should come from only one source."""
|
"""The XML should come from only one source."""
|
||||||
xml_object = ET.parse(self.xmlfile)
|
xml_object = ET.parse(self.xmlfile)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue