Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions sope-mime/NGImap4/NGImap4ResponseNormalizer.m
Original file line number Diff line number Diff line change
Expand Up @@ -129,15 +129,28 @@ - (NSMutableDictionary *)normalizeResponse:(NGHashMap *)_map {
}

- (NSDictionary *)normalizeSortResponse:(NGHashMap *)_map {
/* filter for sort response (search : NSArray (msn)) */
/*
Filter for sort response (sort: NSArray of UIDs).

Some IMAP servers (e.g. Dovecot) may return SORT data in an untagged
response but then send a tagged NO (e.g. "sort would have taken too
long"). The data is still valid, so if we received sort results we
treat the command as successful regardless of the tagged status.
*/
id obj;
NSMutableDictionary *result;

result = [self normalizeResponse:_map];
if ((obj = [[_map objectEnumeratorForKey:@"sort"] nextObject]) != nil)

if ((obj = [[_map objectEnumeratorForKey:@"sort"] nextObject]) != nil) {
[result setObject:obj forKey:@"sort"];


/* Promote to success when sort data was returned despite a tagged NO */
if (![[result objectForKey:@"result"] boolValue]) {
[result setObject:[NSNumber numberWithBool:YES] forKey:@"result"];
}
}

return result;
}

Expand Down