# -*- coding: utf-8 -*-

from system_tests import CaseMeta, path


class DenialOfServiceInAdjustTimeOverflow(metaclass=CaseMeta):
    """
    Regression test for the bug described in:
    https://github.com/Exiv2/exiv2/issues/851

    The date parsing code in XMPUtils::ConvertToDate does not
    check that the month and day are in bounds. This can cause a
    denial of service in AdjustTimeOverflow because it adjusts
    out-of-bounds days in a loop that subtracts one month per
    iteration.
    """
    url = "https://github.com/Exiv2/exiv2/issues/851"

    filename = path("$data_path/issue_851_poc.xmp")
    commands = ["$exiv2 $filename"]
    stdout = ["""File name       : $filename
File size       : 317 Bytes
MIME type       : application/rdf+xml
Image size      : 0 x 0
"""
]
    stderr = ["""Error: XMP Toolkit error 201: Error in XMLValidator
Warning: Failed to decode XMP metadata.
$filename: No Exif data found in the file
"""]
    retval = [253]
