Package: kopanocore / 8.7.0-7

Metadata

Package Version Patches format
kopanocore 8.7.0-7 3.0 (quilt)

Patch series

view the series file
Patch File delta Description
debian/Add include for database configuration.patch | (download)

installer/linux/server.cfg | 2 2 + 0 - 0 !
1 file changed, 2 insertions(+)

 add include for database configuration


debian/Run deamons as user group kopano.patch | (download)

installer/linux/dagent.cfg | 4 2 + 2 - 0 !
installer/linux/gateway.cfg | 4 2 + 2 - 0 !
installer/linux/ical.cfg | 4 2 + 2 - 0 !
installer/linux/monitor.cfg | 4 2 + 2 - 0 !
installer/linux/server.cfg | 4 2 + 2 - 0 !
installer/linux/spooler.cfg | 4 2 + 2 - 0 !
6 files changed, 12 insertions(+), 12 deletions(-)

 run deamons as user/group kopano


Use install layout deb.patch | (download)

ECtools/backup/Makefile.am | 2 1 + 1 - 0 !
ECtools/cli/Makefile.am | 4 2 + 2 - 0 !
ECtools/migration-pst/Makefile.am | 4 2 + 2 - 0 !
ECtools/presence/Makefile.am | 4 2 + 2 - 0 !
ECtools/rest/Makefile.am | 4 2 + 2 - 0 !
ECtools/search/Makefile.am | 4 2 + 2 - 0 !
ECtools/spamd/Makefile.am | 4 2 + 2 - 0 !
ECtools/utils/Makefile.am | 4 2 + 2 - 0 !
swig/python/Makefile.am | 4 2 + 2 - 0 !
swig/python/kopano/Makefile.am | 4 2 + 2 - 0 !
swig/python/zarafa/Makefile.am | 4 2 + 2 - 0 !
11 files changed, 21 insertions(+), 21 deletions(-)

 use install-layout=deb


Use python3 everywhere.patch | (download)

ECtools/archiver/scripts/kopano-archiver-aclset | 2 1 + 1 - 0 !
ECtools/archiver/scripts/kopano-archiver-aclsync | 2 1 + 1 - 0 !
ECtools/archiver/scripts/kopano-archiver-restore | 2 1 + 1 - 0 !
ECtools/backup/kopano_backup/__init__.py | 2 1 + 1 - 0 !
ECtools/cli/kopano_cli/__init__.py | 2 1 + 1 - 0 !
ECtools/migration-pst/kopano_migration_pst/__init__.py | 2 1 + 1 - 0 !
ECtools/migration-pst/kopano_migration_pst/pst.py | 2 1 + 1 - 0 !
ECtools/presence/kopano_presence/__init__.py | 2 1 + 1 - 0 !
ECtools/search/kopano-search-upgrade-findroots.py | 2 1 + 1 - 0 !
ECtools/search/kopano-search-xapian-compact.py | 2 1 + 1 - 0 !
ECtools/search/kopano_search/__init__.py | 2 1 + 1 - 0 !
ECtools/search/kopano_search/plaintext.py | 2 1 + 1 - 0 !
ECtools/spamd/kopano_spamd/__init__.py | 2 1 + 1 - 0 !
ECtools/utils/kopano-mailbox-permissions | 2 1 + 1 - 0 !
ECtools/utils/kopano-set-oof | 2 1 + 1 - 0 !
swig/python/kopano/kopano/daemon/version/version_info.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/delete_pattern.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/dump-att.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/fromto.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/goocal.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/import_rfc.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/kopano-monitor.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/kopano-spamhandler.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/kopano-stats.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/kopano-tracer.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/list-folder-size.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/loadsim.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/loop.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/mapidump.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/rfcdump.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/rule.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/send.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/sync.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/tables.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/tree.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/urwap.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/userentryid.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/z-fuse.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/z-plot.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/z-rest.py | 2 1 + 1 - 0 !
swig/python/kopano/scripts/zarapy.py | 2 1 + 1 - 0 !
tools/python-scripts/kopano-cachestat | 2 1 + 1 - 0 !
tools/python-scripts/kopano-fix-ipm-subtree | 2 1 + 1 - 0 !
tools/python-scripts/kopano-localize-folders | 2 1 + 1 - 0 !
tools/python-scripts/kopano-recreate-systemfolders | 2 1 + 1 - 0 !
tools/python-scripts/kopano-rules | 2 1 + 1 - 0 !
tools/python-scripts/optimize-imap.py | 2 1 + 1 - 0 !
tools/python-scripts/update-resource-recipients | 2 1 + 1 - 0 !
tools/searchfolder_cleaning.py | 2 1 + 1 - 0 !
49 files changed, 49 insertions(+), 49 deletions(-)

 use python3 everywhere


apparmor Be less strict on the Python binary.patch | (download)

installer/linux/usr.sbin.kopano-search | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 apparmor: be less strict on the python binary


debian/tmpfiles.conf don t add var run kopano.patch | (download)

installer/linux/kopano-tmpfiles.conf | 1 0 + 1 - 0 !
1 file changed, 1 deletion(-)

 tmpfiles.conf: don't add /var/run/kopano

/var/run is a symlink to /run and the tmpfile configuration did also
have a entry for /run, so /var/run is useless if added too.

spelling fix seperated separated.patch | (download)

doc/kopano-backup.cfg.5 | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 spelling: fix seperated -> separated


spelling accomodate accommodate.patch | (download)

doc/kopano-dbadm.8 | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 spelling: accomodate -> accommodate


spelling allows to allows one to.patch | (download)

doc/kopano-storeadm.8 | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 spelling: allows to -> allows one to


server check for NULL SSL context before calling soap_ssl.patch | (download)

provider/server/ECSoapServerConnection.cpp | 4 2 + 2 - 0 !
provider/server/ECThreadManager.cpp | 4 2 + 2 - 0 !
2 files changed, 4 insertions(+), 4 deletions(-)

 server: check for null ssl context before calling soap_ssl_error

There may be a time where soap->ssl is NULL (like, when initializing
the context failed?), but soap_ssl_error from gsoap-2.8.80 does not
test for this condition.

References: KC-1422, KC-1437

server cure use after free crash on shutdown.patch | (download)

provider/libserver/ECDatabaseFactory.cpp | 4 3 + 1 - 0 !
1 file changed, 3 insertions(+), 1 deletion(-)

 server: cure use-after-free crash on shutdown

==13416==ERROR: AddressSanitizer: heap-use-after-free on address 0x6040018f4ea0 at pc 0x7f77dc7f1d8b bp 0x7f77ccbc3af0 sp 0x7f77ccbc3ae8
READ of size 8 at 0x6040018f4ea0 thread T22 (net/idle)
    f0 0x7f77dc7f1d8a in std::__shared_ptr<KC::ECDatabase, (__gnu_cxx::_Lock_policy)2>::get() const /usr/include/c++/9/bits/shared_ptr_base.h:1310
    f1 0x7f77dc7f2a2f in std::__shared_ptr_access<KC::ECDatabase, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get() const /usr/include/c++/9/bits/shared_ptr_base.h:1021
    f2 0x7f77dc7f2013 in std::__shared_ptr_access<KC::ECDatabase, (__gnu_cxx::_Lock_policy)2, false, false>::operator->() const /usr/include/c++/9/bits/shared_ptr_base.h:1015
    f3 0x7f77dc7f03e5 in KC::ECDatabaseFactory::S_thread_end(void*) provider/libserver/ECDatabaseFactory.cpp:49
    f4 0x7f77dbe20160 in __nptl_deallocate_tsd /usr/src/debug/glibc-2.29-7.3.x86_64/nptl/pthread_create.c:301
    f5 0x7f77dbe20fca in __nptl_deallocate_tsd /usr/src/debug/glibc-2.29-7.3.x86_64/nptl/pthread_create.c:256
    f6 0x7f77dbe20fca in start_thread /usr/src/debug/glibc-2.29-7.3.x86_64/nptl/pthread_create.c:497
    f7 0x7f77dbb5373e in clone (/lib64/libc.so.6+0xfd73e)

0x6040018f4ea0 is located 16 bytes inside of 40-byte region [0x6040018f4e90,0x6040018f4eb8)
freed by thread T22 (net/idle) here:
    f0 0x7f77dd2c9f07 in operator delete(void*) (/usr/lib64/libasan.so.5+0x10cf07)
    f1 0x7f77dc7f5d8b in __gnu_cxx::new_allocator<std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true> >::deallocate(std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true>*, unsigned long) (/home/jengelh/work/kc/.libs/libkcserver.so.0+0x186d8b)
    f2 0x7f77dc7f543a in std::allocator_traits<std::allocator<std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true> > >::deallocate(std::allocator<std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true> >&, std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true>*, unsigned long) /usr/include/c++/9/bits/alloc_traits.h:470
    f3 0x7f77dc7f4eb0 in std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true> > >::_M_deallocate_node_ptr(std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true>*) (/home/jengelh/work/kc/.libs/libkcserver.so.0+0x185eb0)
    f4 0x7f77dc7f3f69 in std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true> > >::_M_deallocate_node(std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true>*) (/home/jengelh/work/kc/.libs/libkcserver.so.0+0x184f69)
    f5 0x7f77dc7f46b3 in std::_Hashtable<KC::ECDatabaseFactory::dfpair, KC::ECDatabaseFactory::dfpair, std::allocator<KC::ECDatabaseFactory::dfpair>, std::__detail::_Identity, std::equal_to<KC::ECDatabaseFactory::dfpair>, KC::ECDatabaseFactory::dfhash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, true, true> >::_M_erase(unsigned long, std::__detail::_Hash_node_base*, std::__detail::_Hash_node<KC::ECDatabaseFactory::dfpair, true>*) (/home/jengelh/work/kc/.libs/libkcserver.so.0+0x1856b3)
    f6 0x7f77dc7f358e in std::_Hashtable<KC::ECDatabaseFactory::dfpair, KC::ECDatabaseFactory::dfpair, std::allocator<KC::ECDatabaseFactory::dfpair>, std::__detail::_Identity, std::equal_to<KC::ECDatabaseFactory::dfpair>, KC::ECDatabaseFactory::dfhash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, true, true> >::erase(std::__detail::_Node_const_iterator<KC::ECDatabaseFactory::dfpair, true, true>) (/home/jengelh/work/kc/.libs/libkcserver.so.0+0x18458e)
    f7 0x7f77dc7f29c5 in std::_Hashtable<KC::ECDatabaseFactory::dfpair, KC::ECDatabaseFactory::dfpair, std::allocator<KC::ECDatabaseFactory::dfpair>, std::__detail::_Identity, std::equal_to<KC::ECDatabaseFactory::dfpair>, KC::ECDatabaseFactory::dfhash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, true, true> >::erase(std::__detail::_Node_iterator<KC::ECDatabaseFactory::dfpair, true, true>) /usr/include/c++/9/bits/hashtable.h:768
    f8 0x7f77dc7f1fc3 in std::unordered_set<KC::ECDatabaseFactory::dfpair, KC::ECDatabaseFactory::dfhash, std::equal_to<KC::ECDatabaseFactory::dfpair>, std::allocator<KC::ECDatabaseFactory::dfpair> >::erase(std::__detail::_Node_iterator<KC::ECDatabaseFactory::dfpair, true, true>) /usr/include/c++/9/bits/unordered_set.h:528
    f9 0x7f77dc7f03d2 in KC::ECDatabaseFactory::S_thread_end(void*) provider/libserver/ECDatabaseFactory.cpp:48 [p->db->
    f10 0x7f77dbe20160 in __nptl_deallocate_tsd /usr/src/debug/glibc-2.29-7.3.x86_64/nptl/pthread_create.c:301

References: KC-1531

z push/Decrease ICS processing batch size.patch | (download)

provider/libserver/ECICS.cpp | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 decrease ics processing batch size

This fixes the following Z-push error:

   StatusException: ExportChangesICS->InitializeExporter():
       Error, mapi_exportchanges_config() failed: 0xFFFFFFFF8004010F
       - code: 12
       - file: /usr/share/z-push/backend/kopano/exporter.php:230

when running kopanocore with Mariadb 10.3.

Closes: #939751

common the SSL proto list string is TLSv1 not TLSv1.0.patch | (download)

common/SSLUtil.h | 2 1 + 1 - 0 !
doc/kopano-gateway.cfg.5 | 2 1 + 1 - 0 !
doc/kopano-ical.cfg.5 | 2 1 + 1 - 0 !
doc/kopano-server.cfg.5 | 2 1 + 1 - 0 !
4 files changed, 4 insertions(+), 4 deletions(-)

 common: the ssl proto list string is "tlsv1" not "tlsv1.0"

Correct a misspelling that caused TLSv1.0 not to get disabled.

References: KC-1439

server recognize TLSv1.0 for backward compat.patch | (download)

provider/server/ECSoapServerConnection.cpp | 3 2 + 1 - 0 !
1 file changed, 2 insertions(+), 1 deletion(-)

 server: recognize "tlsv1.0" for backward compat


gateway avoid uncaught exception when client disconnects .patch | (download)

gateway/IMAP.cpp | 13 12 + 1 - 0 !
gateway/IMAP.h | 1 1 + 0 - 0 !
2 files changed, 13 insertions(+), 1 deletion(-)

 gateway: avoid uncaught exception when client disconnects midway

Upstream commit: https://stash.kopano.io/projects/KC/repos/kopanocore/commits/6f9f5d9532

Upstream bug report: https://jira.kopano.io/browse/KC-1452

Partially revert libserver implement object caching by us.patch | (download)

provider/libserver/ECStoreObjectTable.cpp | 4 2 + 2 - 0 !
provider/libserver/ECStoreObjectTable.h | 1 1 + 0 - 0 !
provider/libserver/cmd.cpp | 3 2 + 1 - 0 !
3 files changed, 5 insertions(+), 3 deletions(-)

 partially revert "libserver: implement object caching by using the
 cell cache"

Present theory is that CHILDPROPS has tproperties data, which is
(erroneously?) used to populate the cache.

Fixes: kopanocore-8.6.80-869-gc0b1f0794
References: KC-1417, KS-42569, KS-42574, KS-42620

libserver remove constant 5th argument to GetCell.patch | (download)

provider/libserver/ECCacheManager.cpp | 7 3 + 4 - 0 !
provider/libserver/ECCacheManager.h | 2 1 + 1 - 0 !
provider/libserver/ECSessionManager.cpp | 2 1 + 1 - 0 !
provider/libserver/ECStoreObjectTable.cpp | 2 1 + 1 - 0 !
provider/libserver/StreamUtil.cpp | 2 1 + 1 - 0 !
provider/libserver/cmd.cpp | 4 2 + 2 - 0 !
6 files changed, 9 insertions(+), 10 deletions(-)

 libserver: remove constant 5th argument to getcell


libserver turn GetCell bool params into a flags argument.patch | (download)

provider/libserver/ECCacheManager.cpp | 4 2 + 2 - 0 !
provider/libserver/ECCacheManager.h | 7 6 + 1 - 0 !
provider/libserver/cmd.cpp | 2 1 + 1 - 0 !
3 files changed, 9 insertions(+), 4 deletions(-)

 libserver: turn getcell bool params into a flags argument


libserver only return PT_NULL cacheentry info when so req.patch | (download)

provider/libserver/ECCacheManager.cpp | 7 5 + 2 - 0 !
provider/libserver/ECCacheManager.h | 1 1 + 0 - 0 !
provider/libserver/cmd.cpp | 2 1 + 1 - 0 !
3 files changed, 7 insertions(+), 3 deletions(-)

 libserver: only return pt_null cacheentry info when so requested

Loading a "large" property causes a PT_NULL pseudo entry to be placed
into the cache, indicating that the proptag exists, but is willfully
uncached. Some callers of GetCell however did not anticipate an
erSuccess return code with PT_NULL data, and would rather want to see
the KCERR_NOT_FOUND return code.

References: KC-1417

libserver reduce indent in SOT QueryRowByColumn.patch | (download)

provider/libserver/ECStoreObjectTable.cpp | 19 10 + 9 - 0 !
1 file changed, 10 insertions(+), 9 deletions(-)

 libserver: reduce indent in sot::queryrowbycolumn


libserver shorten common subexpression with alias ECStore.patch | (download)

provider/libserver/ECStoreObjectTable.cpp | 38 18 + 20 - 0 !
1 file changed, 18 insertions(+), 20 deletions(-)

 libserver: shorten common subexpression with alias
 (ECStoreObjectTable)


libserver stop caching truncated tproperties data.patch | (download)

provider/libserver/ECStoreObjectTable.cpp | 8 6 + 2 - 0 !
1 file changed, 6 insertions(+), 2 deletions(-)

 libserver: stop caching truncated tproperties data

The cache may be become polluted with 255-char data. It always did
this, but until c0b1f07, the cache was not read.

Fixes: kopanocore-8.6.80-869-gc0b1f0794
References: KC-1417

libserver add option to disable cell read cache.patch | (download)

gateway/IMAP.cpp | 4 2 + 2 - 0 !
provider/libserver/ECCacheManager.h | 4 2 + 2 - 0 !
provider/libserver/cmd.cpp | 10 6 + 4 - 0 !
provider/server/ECServer.cpp | 1 1 + 0 - 0 !
4 files changed, 11 insertions(+), 8 deletions(-)

 libserver: add option to disable cell read cache

Expose the cell cache knob as a config option so it can be made use
of in testing.

References: KC-1417

m4lcommon have HrGetAllProps preserve MAPI_W_ERRORS_RETUR.patch | (download)

m4lcommon/CommonUtil.cpp | 9 7 + 2 - 0 !
1 file changed, 7 insertions(+), 2 deletions(-)

 m4lcommon: have hrgetallprops preserve mapi_w_errors_returned

IMAPIProp::GetProps can return MAPI_W_ERRORS_RETURNED. This happens
when, for example, the property considered is "too large", or when it
is in fact not found.

HrGetAllProps leaves non-ENOMEM PT_ERRORS as-is, but still returns
hrSuccess, which is not right.

References: KC-1417, KC-1443

m4lcommon factor out HrGetAllProp s large property post l.patch | (download)

m4lcommon/CommonUtil.cpp | 56 35 + 21 - 0 !
m4lcommon/include/kopano/CommonUtil.h | 1 1 + 0 - 0 !
2 files changed, 36 insertions(+), 21 deletions(-)

 m4lcommon: factor out hrgetallprop's large property post-loading

References: KC-1443

m4lcommon add new helper for loading large properties tra.patch | (download)

m4lcommon/CommonUtil.cpp | 23 23 + 0 - 0 !
m4lcommon/include/kopano/CommonUtil.h | 1 1 + 0 - 0 !
2 files changed, 24 insertions(+)

 m4lcommon: add new helper for loading large properties transparently

References: KC-1443

treewide read large properties using HrGetFullProp.patch | (download)

inetmapi/MAPIToVMIME.cpp | 15 8 + 7 - 0 !
inetmapi/VMIMEToMAPI.cpp | 6 3 + 3 - 0 !
libicalmapi/mapitovcf.cpp | 3 2 + 1 - 0 !
spooler/DAgent.cpp | 2 1 + 1 - 0 !
spooler/mailer.cpp | 2 1 + 1 - 0 !
spooler/rules.cpp | 12 6 + 6 - 0 !
6 files changed, 21 insertions(+), 19 deletions(-)

 treewide: read large properties using hrgetfullprop

Some properties are just generally large all the time - and cannot always be
successfully requested via HrGetOneProp. netitwork tally:

SQL> SELECT HEX(tag), MAX(LEN(val_string)) AS z FROM properties
     WHERE type=30 GROUP BY tag ORDER BY z; -- PT_TSTRING

+-tag
client fix a comment about gratitious property sizes.patch | (download)

provider/client/WSMAPIPropStorage.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 client: fix a comment about gratitious property sizes

References: KC-1443

libserver restore tproperties synchronization for read fl.patch | (download)

provider/libserver/cmd.cpp | 2 2 + 0 - 0 !
1 file changed, 2 insertions(+)

 libserver: restore tproperties synchronization for read flags

Fixes: kopanocore-8.6.81-187-g31f97dd40
References: KC-1444

libserver add missing space before LOCK SHARE.patch | (download)

provider/libserver/cmdutil.cpp | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 libserver: add missing space before lock share


dbadm pass shared_ptr KDatabase consistently.patch | (download)

ECtools/dbadm.cpp | 65 33 + 32 - 0 !
1 file changed, 33 insertions(+), 32 deletions(-)

 dbadm: pass shared_ptr<kdatabase> consistently

Helps with the upcoming parallel execution patches.

dbadm add corrective procedure for bug KC 1444.patch | (download)

ECtools/dbadm.cpp | 17 17 + 0 - 0 !
doc/kopano-dbadm.8 | 6 6 + 0 - 0 !
2 files changed, 23 insertions(+)

 dbadm: add corrective procedure for bug kc-1444

References: KC-1444

freebusy avoid out of bounds access in HrAddFBBlock.patch | (download)

libfreebusy/freebusyutil.cpp | 5 3 + 2 - 0 !
1 file changed, 3 insertions(+), 2 deletions(-)

 freebusy: avoid out of bounds access in hraddfbblock

*lpcValues was replaced with ulModVal (lpcValues could be nullptr),
but this is one element too much for copying the old array.

valgrind:
Invalid read of size 8
KC::HrAddFBBlock(KC::OccrInfo const&, KC::OccrInfo**, unsigned int*) (freebusyutil.cpp:546)
KC::recurrence::AddValidOccr (recurrence.cpp:1104)
KC::recurrence::HrGetItems (recurrence.cpp:1007)
KC::ICalRecurrence::HrParseICalRecurrenceRule (icalrecurrence.cpp:224)
KC::VConverter::HrAddRecurrence (vconverter.cpp:1310)
KC::VConverter::HrICal2MAPI (vconverter.cpp:165)
KC::VEventConverter::HrICal2MAPI (vevent.cpp:37)
KC::ICalToMapiImpl::ParseICal (ICalToMAPI.cpp:225)

Fixes: kopanocore-8.2.0-freeze~170^2~3
References: KC-235