Revision: 13847
          http://sourceforge.net/p/skim-app/code/13847
Author:   hofman
Date:     2023-12-06 22:36:55 +0000 (Wed, 06 Dec 2023)
Log Message:
-----------
Restrict xattr name prefix length at init rather than unique part when writing

Modified Paths:
--------------
    trunk/SkimNotes/SKNExtendedAttributeManager.m

Modified: trunk/SkimNotes/SKNExtendedAttributeManager.m
===================================================================
--- trunk/SkimNotes/SKNExtendedAttributeManager.m       2023-12-06 18:41:41 UTC 
(rev 13846)
+++ trunk/SkimNotes/SKNExtendedAttributeManager.m       2023-12-06 22:36:55 UTC 
(rev 13847)
@@ -42,7 +42,7 @@
 #import <bzlib.h>
 
 #define MAX_XATTR_LENGTH        2048
-#define MAX_XATTR_NAME_LENGTH   127
+#define MAX_NAME_PREFIX_LENGTH  80
 #define MIN_EXTRA_NAME_LENGTH   34
 #define PREFIX                  @"net_sourceforge_skim-app"
 
@@ -115,10 +115,12 @@
 {
     self = [super init];
     if (self) {
-        _namePrefix = [prefix stringByAppendingString:NAME_SEPARATOR];
         _uniqueKey = [prefix stringByAppendingString:UNIQUE_KEY_SUFFIX];
         _wrapperKey = [prefix stringByAppendingString:WRAPPER_KEY_SUFFIX];
         _fragmentsKey = [prefix stringByAppendingString:FRAGMENTS_KEY_SUFFIX];
+        if ([prefix length] > MAX_NAME_PREFIX_LENGTH)
+            prefix = [prefix substringToIndex:MAX_NAME_PREFIX_LENGTH];
+        _namePrefix = [prefix stringByAppendingString:NAME_SEPARATOR];
     }
     return self;
 }
@@ -363,13 +365,6 @@
         // this will be a unique identifier for the set of keys we're about to 
write (appending a counter to the UUID)
         NSString *uniqueValue = [self uniqueName];
         NSUInteger numberOfFragments = ([value length] / MAX_XATTR_LENGTH) + 
([value length] % MAX_XATTR_LENGTH ? 1 : 0);
-        NSUInteger j = [attr rangeOfString:SYNCABLE_SEPARATOR].location;
-        NSString *suffix = j == NSNotFound || j == [attr length] - 1 ? @"" : 
[attr substringFromIndex:j];
-        NSUInteger maxSuffixLength = [suffix length] + 2 + 
(NSUInteger)floor(log10(MAX(2, numberOfFragments) - 1));
-        
-        if ([uniqueValue length] + maxSuffixLength > MAX_XATTR_NAME_LENGTH)
-            uniqueValue = [uniqueValue substringToIndex:MAX_XATTR_NAME_LENGTH 
- maxSuffixLength];
-        
         NSDictionary *wrapper = [NSDictionary 
dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], _wrapperKey, 
uniqueValue, _uniqueKey, [NSNumber 
numberWithUnsignedInteger:numberOfFragments], _fragmentsKey, nil];
         NSData *wrapperData = [NSPropertyListSerialization 
dataWithPropertyList:wrapper format:NSPropertyListBinaryFormat_v1_0 options:0 
error:NULL];
         NSParameterAssert([wrapperData length] < MAX_XATTR_LENGTH && 
[wrapperData length] > 0);
@@ -385,6 +380,9 @@
         NSUInteger i;
         const char *valuePtr = [value bytes];
         
+        NSUInteger j = [attr rangeOfString:SYNCABLE_SEPARATOR].location;
+        NSString *suffix = j == NSNotFound || j == [attr length] - 1 ? @"" : 
[attr substringFromIndex:j];
+        
         for (i = 0; success && i < numberOfFragments; i++) {
             name = [[NSString alloc] initWithFormat:@"%@%@%lu%@", uniqueValue, 
FRAGMENT_NAME_SEPARATOR, (long)i, suffix];
             

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



_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to