Fix infinite recursion in CPDF_Parser::ParseIndirectObjectAt().
authorTom Sepez <tsepez@chromium.org>
Tue, 27 Jan 2015 00:51:21 +0000 (16:51 -0800)
committerTom Sepez <tsepez@chromium.org>
Tue, 27 Jan 2015 00:51:21 +0000 (16:51 -0800)
commita03932372b0906a340a6e3860c87e45f9ec79042
treebb92376fc72a8b30e76a09aec332141eeae58634
parentfa370ac5cf6472f0ec0c9ecf62d1f9dd20ebfa42
Fix infinite recursion in CPDF_Parser::ParseIndirectObjectAt().

A suitably corrupted file can cause the parser(s) to repeatedly re-read
sections of the file at increasing parser recursion depth until the
stack is exhausted.  There is supposed to be a check for this based upon
the parser "level", but not all call paths pass or update the level as
required.

Much as I hate per-class statics, this introduces one to track the depth
so that the check is enforced no matter how screwy the call path might be
that leads the parser to re-enter itself. This is more palatable than trying
to find all these paths and fix them. We know this is OK since there is
only one thread in here modifying the static.

BUG=451830
R=thestig@chromium.org

Review URL: https://codereview.chromium.org/875263002
core/include/fpdfapi/fpdf_parser.h
core/include/fxcrt/fx_basic.h
core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
fpdfsdk/src/fpdfview_embeddertest.cpp
testing/resources/bug_451830.pdf [new file with mode: 0644]