From 37cbdd43780c6fcfbc6c10e31dc97a4a212d0274 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 5 May 2010 13:46:58 +0000 Subject: [PATCH] Monotone-Parent: 915f4f176feb772bfa74b034b6b7ce28f66778f8 Monotone-Revision: 4fb71d76cac3b87ffc098133f9c93d0e753c5284 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-05-05T13:46:58 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/versitCardsSaxDriver/ChangeLog | 5 +++++ .../NGCards/versitCardsSaxDriver/VSSaxDriver.m | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) 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]; }