Bug 126279 - CRASH when resuming work with a WebDAV document when session has timed out
Summary: CRASH when resuming work with a WebDAV document when session has timed out
Status: RESOLVED FIXED
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: LibreOffice (show other bugs)
Version:
(earliest affected)
unspecified
Hardware: All All
: medium normal
Assignee: Mike Kaganski
URL:
Whiteboard: target:6.4.0 target:6.3.0.2
Keywords:
Depends on:
Blocks:
 
Reported: 2019-07-08 02:56 UTC by Mike Kaganski
Modified: 2019-12-18 06:46 UTC (History)
1 user (show)

See Also:
Crash report or crash signature:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mike Kaganski 2019-07-08 02:56:17 UTC
LibreOffice crashes when it has a WebDAV document open, and had not communicated with the server for a while, thus the session has timed out on the server.

Steps:
1. Open a document from a WebDAV server, like SharePoint.
2. Let LibreOffice stay idle for enough time - in my testing, I didn't touch it for about 30 minutes.
3. Switch back to LibreOffice, and try anything that would initiate a WebDAV operation: it could be e.g. opening File menu; or even just closing the document.

LibreOffice crashes silently.
Tested with Version: 6.2.5.2 (x64)
Build ID: 1ec314fa52f458adc18c4f025c545a4e8b22c159
CPU threads: 4; OS: Windows 10.0; UI render: GL; VCL: win; 
Locale: ru-RU (ru_RU); UI-Language: en-US
Calc: threaded

and current master toward 6.4.
Comment 1 Mike Kaganski 2019-07-08 08:09:21 UTC
The problem is that in clean_session was called from this stack:

> neon.dll!clean_session(auth_session * sess) Line 275
> 	at C:\cygwin\home\user\lode\dev\core\workdir\UnpackedTarball\neon\src\ne_auth.c(275)
> neon.dll!ah_post_send(ne_request_s * req, void * cookie, const ne_status * status) Line 1554
> 	at C:\cygwin\home\user\lode\dev\core\workdir\UnpackedTarball\neon\src\ne_auth.c(1554)
> neon.dll!ne_end_request(ne_request_s * req) Line 1399
> 	at C:\cygwin\home\user\lode\dev\core\workdir\UnpackedTarball\neon\src\ne_request.c(1399)
> neon.dll!ne_xml_dispatch_request(ne_request_s * req, ne_xml_parser_s * parser) Line 105
> 	at C:\cygwin\home\user\lode\dev\core\workdir\UnpackedTarball\neon\src\ne_xmlreq.c(105)
> neon.dll!ne_lock_refresh(ne_session_s * sess, ne_lock * lock) Line 849
> 	at C:\cygwin\home\user\lode\dev\core\workdir\UnpackedTarball\neon\src\ne_locks.c(849)
> ucpdav1.dll!webdav_ucp::NeonSession::LOCK(ne_lock * pLock, long & rlastChanceToSendRefreshRequest) Line 1663
> 	at C:\cygwin\home\user\lode\dev\core\ucb\source\ucp\webdav-neon\NeonSession.cxx(1663)
> ucpdav1.dll!webdav_ucp::NeonLockStore::refreshLocks() Line 216
> 	at C:\cygwin\home\user\lode\dev\core\ucb\source\ucp\webdav-neon\NeonLockStore.cxx(216)
> ucpdav1.dll!webdav_ucp::TickerThread::execute() Line 78
> 	at C:\cygwin\home\user\lode\dev\core\ucb\source\ucp\webdav-neon\NeonLockStore.cxx(78)
> salhelper3MSC.dll!salhelper::Thread::run() Line 40
> 	at C:\cygwin\home\user\lode\dev\core\salhelper\source\thread.cxx(40)
> salhelper3MSC.dll!threadFunc(void * param) Line 186
> 	at C:\cygwin\home\user\lode\dev\core\include\osl\thread.hxx(186)
> sal3.dll!oslWorkerWrapperFunction(void * pData) Line 58
> 	at C:\cygwin\home\user\lode\dev\core\sal\osl\w32\thread.cxx(58)
> ucrtbased.dll!thread_start<unsigned int (__cdecl*)(void *),1>(void * const parameter) Line 97
> 	at minkernel\crts\ucrt\src\appcrt\startup\thread.cpp(97)
> kernel32.dll!BaseThreadInitThunk()
> ntdll.dll!RtlUserThreadStart()

but haven't reinitialized the session before a subsequent access. See https://git.libreoffice.org/core/+/162a472d55cf9fb9aaa6d5eae625b3da2273a516 where a similar problem was handled.

https://gerrit.libreoffice.org/75194
Comment 2 Commit Notification 2019-07-08 12:02:34 UTC
Mike Kaganski committed a patch related to this issue.
It has been pushed to "master":

https://git.libreoffice.org/core/+/351b730e012fd4562f341967f740f8146aa0538e%5E%21

tdf#126279: reinitialize session after NE_AUTH errors in (UN)LOCK

It will be available in 6.4.0.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 3 Mike Kaganski 2019-07-08 12:05:40 UTC
The crash is fixed. Still there's a problem left, that the lock that failed to refresh is still kept in the lock store, and following locks fail. To be handled separately.
Comment 4 Commit Notification 2019-07-08 21:57:39 UTC
Mike Kaganski committed a patch related to this issue.
It has been pushed to "master":

https://git.libreoffice.org/core/+/94e4695bcfcb9356d37942c47359b94531ef7b95%5E%21

tdf#126279 related: remove locks from NeonLockStore after NE_AUTH error

It will be available in 6.4.0.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 5 Commit Notification 2019-07-11 09:04:37 UTC
Mike Kaganski committed a patch related to this issue.
It has been pushed to "libreoffice-6-3":

https://git.libreoffice.org/core/+/c8b91cc5356d670a3b0a7ca0efaccb56b7125bb5%5E%21

tdf#126279: reinitialize session after NE_AUTH errors in (UN)LOCK

It will be available in 6.3.0.2.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 6 Commit Notification 2019-07-11 11:12:57 UTC
Mike Kaganski committed a patch related to this issue.
It has been pushed to "libreoffice-6-3":

https://git.libreoffice.org/core/+/d0af88819e9b569f7b2584921e910422b8aaff9e%5E%21

tdf#126279 related: remove locks from NeonLockStore after NE_AUTH error

It will be available in 6.3.0.2.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.