On Thu, Oct 28, 2021 at 01:41:24PM +0200, Landry Breuil wrote: > Le Thu, Oct 28, 2021 at 01:18:33PM +0200, Marcus MERIGHI a écrit : > > Hello! > > > > This is just a heads-up for fellow SOGo users and a plea to > > @landry: would you mind sharing your new gnustep/sogo packages? > > > > After upgrading to OpenBSD 7.0 with the updates to: > > > > -sogo-5.0.1p0 web based groupware server > > +sogo-5.2.0 web based groupware server > > -gnustep-base-1.27.0p0 GNUstep base library > > +gnustep-base-1.28.0p1 GNUstep base library > > > > I experience a symptom of "you can create events but you cannot change > > them". Clients are DAVx5 for android and caldavsynchronizer for > > Outlook/Windows10. DAV access with e.g. cadaver(1) works. > > > > While chasing the cause I soon found I'm not the first to do so, thank > > you, landry@, for beeing quicker: > > > > SOGo bug report by landry@ > > https://www.sogo.nu/bugs/view.php?id=5416 > > > > Gnustep bug report by landry@ > > https://github.com/gnustep/libs-base/issues/212 > > > > The commit landry@ reverted to get www/sogo to a working state: > > https://github.com/gnustep/libs-base/commit/bd5f2909e6edc8012a0a6e44ea1402dfbe1353a4 > > I havent tested access with DAVx5 or anything else, only from > thunderbird/lightning. But if it's the same bug and reverting the commit > fixes it for you too, please add your voice to the sogo/gnustep bug > reports.. > your diff/package works with DAVx5 clients as well, thanks. unfortunately I have no idea if this is the correct fix or just a workaround.
Giovanni > I use the attached diff on 7.0-stable, there's an (unsigned) package at > https://packages.rhaalovely.net/7.0/amd64/ > > Landry > Index: Makefile > =================================================================== > RCS file: /cvs/ports/x11/gnustep/base/Makefile,v > retrieving revision 1.81 > diff -u -r1.81 Makefile > --- Makefile 3 Sep 2021 11:47:42 -0000 1.81 > +++ Makefile 26 Oct 2021 14:50:55 -0000 > @@ -3,7 +3,7 @@ > COMMENT= GNUstep base library > > DISTNAME= gnustep-base-1.28.0 > -REVISION= 1 > +REVISION= 2 > > SHARED_LIBS= gnustep-base 10.4 > CATEGORIES= devel > Index: patches/patch-Headers_Foundation_NSString_h > =================================================================== > RCS file: patches/patch-Headers_Foundation_NSString_h > diff -N patches/patch-Headers_Foundation_NSString_h > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-Headers_Foundation_NSString_h 26 Oct 2021 14:50:55 > -0000 > @@ -0,0 +1,19 @@ > +$OpenBSD$ > + > +Revert > https://github.com/gnustep/libs-base/commit/bd5f2909e6edc8012a0a6e44ea1402dfbe1353a4 > +https://github.com/gnustep/libs-base/issues/212 > + > +Index: Headers/Foundation/NSString.h > +--- Headers/Foundation/NSString.h.orig > ++++ Headers/Foundation/NSString.h > +@@ -482,10 +482,6 @@ GS_EXPORT_CLASS > + // Working With Encodings > + - (BOOL) canBeConvertedToEncoding: (NSStringEncoding)encoding; > + - (NSData*) dataUsingEncoding: (NSStringEncoding)encoding; > +-/** Conversion to an encoding where byte order matters but is not specified > +- * (NSUnicodeStringEncoding, NSUTF16StringEncoding, NSUTF32StringEncoding) > +- * produces data with a Byte Order Marker (BOM) at the start of the data. > +- */ > + - (NSData*) dataUsingEncoding: (NSStringEncoding)encoding > + allowLossyConversion: (BOOL)flag; > + + (NSStringEncoding) defaultCStringEncoding; > Index: patches/patch-Source_GSString_m > =================================================================== > RCS file: patches/patch-Source_GSString_m > diff -N patches/patch-Source_GSString_m > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-Source_GSString_m 26 Oct 2021 14:50:55 -0000 > @@ -0,0 +1,196 @@ > +$OpenBSD$ > + > +Revert > https://github.com/gnustep/libs-base/commit/bd5f2909e6edc8012a0a6e44ea1402dfbe1353a4 > +https://github.com/gnustep/libs-base/issues/212 > + > +Index: Source/GSString.m > +--- Source/GSString.m.orig > ++++ Source/GSString.m > +@@ -2379,6 +2379,133 @@ cStringLength_u(GSStr self, NSStringEncoding enc) > + } > + } > + > ++static inline NSData* > ++dataUsingEncoding_c(GSStr self, NSStringEncoding encoding, BOOL lossy) > ++{ > ++ unsigned len = self->_count; > ++ > ++ if (len == 0) > ++ { > ++ return [NSDataClass data]; > ++ } > ++ > ++ if ((encoding == internalEncoding) > ++ || ((internalEncoding == NSASCIIStringEncoding) > ++ && (encoding == NSUTF8StringEncoding || isByteEncoding(encoding)))) > ++ { > ++ unsigned char *buff; > ++ > ++ buff = (unsigned char*)NSZoneMalloc(NSDefaultMallocZone(), len); > ++ memcpy(buff, self->_contents.c, len); > ++ return [NSDataClass dataWithBytesNoCopy: buff length: len]; > ++ } > ++ else if (encoding == NSUnicodeStringEncoding) > ++ { > ++ unsigned int l = 0; > ++ unichar *r = 0; > ++ unsigned int options = GSUniBOM; > ++ > ++ if (lossy == NO) > ++ { > ++ options |= GSUniStrict; > ++ } > ++ > ++ if (GSToUnicode(&r, &l, self->_contents.c, self->_count, > internalEncoding, > ++ NSDefaultMallocZone(), options) == NO) > ++ { > ++ return nil; > ++ } > ++ return [NSDataClass dataWithBytesNoCopy: r length: l * > sizeof(unichar)]; > ++ } > ++ else > ++ { > ++ unichar *u = 0; > ++ unsigned l = 0; > ++ unsigned char *r = 0; > ++ unsigned s = 0; > ++ > ++ if (GSToUnicode(&u, &l, self->_contents.c, self->_count, > internalEncoding, > ++ NSDefaultMallocZone(), 0) == NO) > ++ { > ++ [NSException raise: NSCharacterConversionException > ++ format: @"Can't convert to Unicode string."]; > ++ } > ++ if (GSFromUnicode(&r, &s, u, l, encoding, NSDefaultMallocZone(), > ++ (lossy == NO) ? GSUniStrict : 0) == NO) > ++ { > ++ NSZoneFree(NSDefaultMallocZone(), u); > ++ return nil; > ++ } > ++ NSZoneFree(NSDefaultMallocZone(), u); > ++ return [NSDataClass dataWithBytesNoCopy: r length: s]; > ++ } > ++} > ++ > ++static inline NSData* > ++dataUsingEncoding_u(GSStr self, NSStringEncoding encoding, BOOL lossy) > ++{ > ++ unsigned len = self->_count; > ++ > ++ if (len == 0) > ++ { > ++ return [NSDataClass data]; > ++ } > ++ > ++ if (encoding == NSUnicodeStringEncoding) > ++ { > ++ unichar *buff; > ++ unsigned l; > ++ unsigned from = 0; > ++ unsigned to = 1; > ++ > ++ if ((l = GSUnicode(self->_contents.u, len, 0, 0)) != len) > ++ { > ++ if (lossy == NO) > ++ { > ++ return nil; > ++ } > ++ } > ++ buff = (unichar*)NSZoneMalloc(NSDefaultMallocZone(), > ++ sizeof(unichar)*(len+1)); > ++ buff[0] = 0xFEFF; > ++ > ++ while (len > 0) > ++ { > ++ if (l > 0) > ++ { > ++ memcpy(buff + to, self->_contents.u + from, sizeof(unichar)*l); > ++ from += l; > ++ to += l; > ++ len -= l; > ++ } > ++ if (len > 0) > ++ { > ++ // A bad character in the string ... skip it. > ++ if (--len > 0) > ++ { > ++ // Not at end ... try another batch. > ++ from++; > ++ l = GSUnicode(self->_contents.u + from, len, 0, 0); > ++ } > ++ } > ++ } > ++ return [NSDataClass dataWithBytesNoCopy: buff > ++ length: sizeof(unichar)*to]; > ++ } > ++ else > ++ { > ++ unsigned char *r = 0; > ++ unsigned int l = 0; > ++ > ++ if (GSFromUnicode(&r, &l, self->_contents.u, self->_count, encoding, > ++ NSDefaultMallocZone(), (lossy == NO) ? GSUniStrict : 0) == NO) > ++ { > ++ return nil; > ++ } > ++ return [NSDataClass dataWithBytesNoCopy: r length: l]; > ++ } > ++} > ++ > + static inline void > + fillHole(GSStr self, unsigned index, unsigned size) > + { > +@@ -3703,6 +3830,12 @@ agree, create a new GSCInlineString otherwise. > + return cStringLength_c((GSStr)self, externalEncoding); > + } > + > ++- (NSData*) dataUsingEncoding: (NSStringEncoding)encoding > ++ allowLossyConversion: (BOOL)flag > ++{ > ++ return dataUsingEncoding_c((GSStr)self, encoding, flag); > ++} > ++ > + - (void) encodeWithCoder: (NSCoder*)aCoder > + { > + if ([aCoder allowsKeyedCoding]) > +@@ -4063,6 +4196,12 @@ agree, create a new GSCInlineString otherwise. > + return cStringLength_u((GSStr)self, externalEncoding); > + } > + > ++- (NSData*) dataUsingEncoding: (NSStringEncoding)encoding > ++ allowLossyConversion: (BOOL)flag > ++{ > ++ return dataUsingEncoding_u((GSStr)self, encoding, flag); > ++} > ++ > + - (void) encodeWithCoder: (NSCoder*)aCoder > + { > + if ([aCoder allowsKeyedCoding]) > +@@ -4551,6 +4690,15 @@ agree, create a new GSUInlineString otherwise. > + return cStringLength_c((GSStr)self, externalEncoding); > + } > + > ++- (NSData*) dataUsingEncoding: (NSStringEncoding)encoding > ++ allowLossyConversion: (BOOL)flag > ++{ > ++ if (_flags.wide == 1) > ++ return dataUsingEncoding_u((GSStr)self, encoding, flag); > ++ else > ++ return dataUsingEncoding_c((GSStr)self, encoding, flag); > ++} > ++ > + - (void) dealloc > + { > + if (_contents.c != 0) > +@@ -5680,6 +5828,11 @@ literalIsEqual(NXConstantString *self, id anObject) > + BOOL ascii; > + BOOL latin1; > + unsigned length; > ++ > ++ if (0 == nxcslen) > ++ { > ++ return [NSDataClass data]; > ++ } > + > + /* Check what is actually in this string ... if it's corrupt an exception > + * is raised. > Index: patches/patch-Source_NSString_m > =================================================================== > RCS file: patches/patch-Source_NSString_m > diff -N patches/patch-Source_NSString_m > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-Source_NSString_m 26 Oct 2021 14:50:55 -0000 > @@ -0,0 +1,78 @@ > +$OpenBSD$ > + > +Revert > https://github.com/gnustep/libs-base/commit/bd5f2909e6edc8012a0a6e44ea1402dfbe1353a4 > +https://github.com/gnustep/libs-base/issues/212 > + > +Index: Source/NSString.m > +--- Source/NSString.m.orig > ++++ Source/NSString.m > +@@ -4126,22 +4126,30 @@ GSICUCollatorOpen(NSStringCompareOptions mask, > NSLocal > + unsigned len = [self length]; > + NSData *d; > + > +- if (NSUnicodeStringEncoding == encoding) > ++ if (len == 0) > + { > ++ d = [NSDataClass data]; > ++ } > ++ else if (encoding == NSUnicodeStringEncoding) > ++ { > + unichar *u; > + unsigned l; > + > +- /* Fast path for Unicode (UTF16) without a specific byte order, > +- * where we must prepend a byte order mark. > +- * The case for UTF32 is handled in the slower branch. > +- */ > + u = (unichar*)NSZoneMalloc(NSDefaultMallocZone(), > + (len + 1) * sizeof(unichar)); > + *u = byteOrderMark; > + [self getCharacters: u + 1]; > + l = GSUnicode(u, len, 0, 0); > +- d = [NSDataClass dataWithBytesNoCopy: u > +- length: (l + 1) * sizeof(unichar)]; > ++ if (l == len || flag == YES) > ++ { > ++ d = [NSDataClass dataWithBytesNoCopy: u > ++ length: (l + 1) * sizeof(unichar)]; > ++ } > ++ else > ++ { > ++ d = nil; > ++ NSZoneFree(NSDefaultMallocZone(), u); > ++ } > + } > + else > + { > +@@ -4156,28 +4164,11 @@ GSICUCollatorOpen(NSStringCompareOptions mask, > NSLocal > + * We can then use our concrete subclass implementation to do the > + * work of converting to the desired encoding. > + */ > +- if (NSUTF32StringEncoding == encoding) > ++ if (len >= 4096) > + { > +- /* For UTF32 without byte order specified, we must include a > +- * BOM at the start of the data. > +- */ > +- len++; > +- if (len >= 4096) > +- { > +- u = NSZoneMalloc(NSDefaultMallocZone(), len * sizeof(unichar)); > +- } > +- *u = byteOrderMark; > +- [self getCharacters: u+1]; > ++ u = NSZoneMalloc(NSDefaultMallocZone(), len * sizeof(unichar)); > + } > +- else > +- { > +- if (len >= 4096) > +- { > +- u = NSZoneMalloc(NSDefaultMallocZone(), len * sizeof(unichar)); > +- } > +- [self getCharacters: u]; > +- } > +- > ++ [self getCharacters: u]; > + if (flag == NO) > + { > + options = GSUniStrict;
signature.asc
Description: PGP signature