Revision: 23972
          http://sourceforge.net/p/bibdesk/svn/23972
Author:   hofman
Date:     2019-07-08 22:01:31 +0000 (Mon, 08 Jul 2019)
Log Message:
-----------
Don't save bibtex with items containing too many fields, as that will crash 
bibdesk when opening because btparse runs out of memory

Modified Paths:
--------------
    trunk/bibdesk/BibItem.m
    trunk/bibdesk/English.lproj/Localizable.strings

Modified: trunk/bibdesk/BibItem.m
===================================================================
--- trunk/bibdesk/BibItem.m     2019-07-08 15:20:58 UTC (rev 23971)
+++ trunk/bibdesk/BibItem.m     2019-07-08 22:01:31 UTC (rev 23972)
@@ -1820,6 +1820,7 @@
     
     NSData *lineSeparator = [@",\n\t" dataUsingEncoding:encoding];
     NSData *fieldValueSeparator = [@" = " dataUsingEncoding:encoding];
+    NSUInteger numFields = 0;
     
     for (field in keys) {
         
@@ -1826,6 +1827,7 @@
         if (isOK == NO) break;
         
         if (NO == dropInternal || [knownKeys containsObject:field]) {
+            numFields++;
             
             value = [pubFields objectForKey:field];
             
@@ -1868,10 +1870,17 @@
         value = [self filesAsBibTeXFragmentRelativeToPath:basePath];
         // assumes encoding is ascii-compatible, but btparse does as well
         if (value) [data appendDataFromString:value encoding:encoding 
error:&error];
+        numFields += [[self files] count];
     }
     if(isOK)
         isOK = [data appendDataFromString:@"}" encoding:encoding error:&error];
     
+    // btparse apparently runs out of memory and crashes with 98+ fields
+    if (isOK && numFields >= 98) {
+        error = [NSError mutableLocalErrorWithCode:kBDSKDocumentSaveError 
localizedDescription:NSLocalizedString(@"Too many fields", @"Error 
description")];
+        [error setValue:[NSString stringWithFormat:NSLocalizedString(@"Too 
many fields for item with cite key \"%@\".", @"Error informative text"), [self 
citeKey]] forKey:NSLocalizedRecoverySuggestionErrorKey];
+    }
+    
     if(isOK == NO && outError)
         *outError = error;
     

Modified: trunk/bibdesk/English.lproj/Localizable.strings
===================================================================
(Binary files differ)

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to