Ticket #9756: for-tag-leaves-imbalanced-context-stack.patch

File for-tag-leaves-imbalanced-context-stack.patch, 1.9 KB (added by Sean Legassick, 16 years ago)
  • django/template/defaulttags.py

     
    128128            values = list(values)
    129129        len_values = len(values)
    130130        if len_values < 1:
     131            context.pop()
    131132            return self.nodelist_empty.render(context)
    132133        nodelist = NodeList()
    133134        if self.is_reversed:
  • tests/regressiontests/templates/tests.py

     
    6363
    6464class SomeOtherException(Exception):
    6565    pass
     66   
     67class ContextStackException(Exception):
     68    pass
    6669
    6770class SomeClass:
    6871    def __init__(self):
     
    203206                try:
    204207                    test_template = loader.get_template(name)
    205208                    output = self.render(test_template, vals)
     209                except ContextStackException:
     210                    failures.append("Template test (TEMPLATE_STRING_IF_INVALID='%s'): %s -- FAILED. Context stack was left imbalanced" % (invalid_str, name))
     211                    continue
    206212                except Exception, e:
    207213                    if e.__class__ != result:
    208214                        raise
     
    226232        self.assertEqual(failures, [], '\n'.join(failures))
    227233
    228234    def render(self, test_template, vals):
    229         return test_template.render(template.Context(vals[1]))
     235        context = template.Context(vals[1])
     236        before_stack_size = len(context.dicts)
     237        output = test_template.render(context)
     238        if len(context.dicts) != before_stack_size:
     239            raise ContextStackException
     240        return output
    230241
    231242    def get_template_tests(self):
    232243        # SYNTAX --
Back to Top