diff --git a/SOPE/NGCards/versitCardsSaxDriver/ChangeLog b/SOPE/NGCards/versitCardsSaxDriver/ChangeLog index 27c495fd6..5afb1fde4 100644 --- a/SOPE/NGCards/versitCardsSaxDriver/ChangeLog +++ b/SOPE/NGCards/versitCardsSaxDriver/ChangeLog @@ -1,3 +1,8 @@ +2010-05-05 Wolfgang Sourdeau + + * VSSaxDriver.m (_endComponent:value:): avoid a crash occurring + when an inconsistency is found in the stack of containers. + 2009-12-22 Wolfgang Sourdeau * VSSaxDriver.m (_endComponent:value:): worked-around the lameness diff --git a/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m b/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m index 7da82eb50..4b6763941 100644 --- a/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m +++ b/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m @@ -31,6 +31,7 @@ #import "VSSaxDriver.h" #import #import +#import #import #import #import "common.h" @@ -653,6 +654,7 @@ static NSCharacterSet *whitespaceCharSet = nil; value: (NSString *) tagValue { NSString *mtName; + int max; mtName = [[self _mapTagName: tagValue] uppercaseString]; if ([cardStack count] > 0) @@ -692,11 +694,19 @@ static NSCharacterSet *whitespaceCharSet = nil; stringByAppendingString: mtName]]; } [self _endGroupElementTag: mtName]; - [cardStack removeLastObject]; - + + max = [cardStack count]; + if (max > 0) + { + [cardStack removeLastObject]; + max--; + } + else + [self errorWithFormat: @"serious inconsistency among begin/end tags"]; + /* report parsed elements */ - - if ([cardStack count] == 0) + + if (max == 0) [self reportQueuedTags]; }