From f75c1966a6869eb043debbcb4432a6b12f874d10 Mon Sep 17 00:00:00 2001 From: Giuseppe Castagno Date: Sun, 8 Nov 2015 11:48:31 +0100 Subject: [PATCH] tdf#90249 fix lock timeout in neon for Windows platform. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit According to RFC 4918 the value used for lock timeout is unsigned 32 bit, see: for info. This patch fix the way the timeout element of lock response payload is parsed in Windows. Change-Id: I335a1cb884c3ef1c2362b00981a2784d9232b23e Reviewed-on: https://gerrit.libreoffice.org/19867 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- external/neon/UnpackedTarball_neon.mk | 11 ++++++++ .../neon/neon_fix_lock_timeout_windows.patch | 27 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 external/neon/neon_fix_lock_timeout_windows.patch diff --git a/external/neon/UnpackedTarball_neon.mk b/external/neon/UnpackedTarball_neon.mk index 25784c4b7373..9cce366fc0d2 100644 --- a/external/neon/UnpackedTarball_neon.mk +++ b/external/neon/UnpackedTarball_neon.mk @@ -17,6 +17,16 @@ $(eval $(call gb_UnpackedTarball_add_files,neon,src,\ $(eval $(call gb_UnpackedTarball_set_patchlevel,neon,0)) +ifeq ($(OS),WNT) +$(eval $(call gb_UnpackedTarball_add_patches,neon,\ + external/neon/neon.patch \ + external/neon/neon_ne_set_request_flag.patch \ + external/neon/neon_with_gnutls.patch \ + external/neon/ubsan.patch \ + external/neon/neon_fix_lock_token_on_if.patch \ + external/neon/neon_fix_lock_timeout_windows.patch \ +)) +else $(eval $(call gb_UnpackedTarball_add_patches,neon,\ external/neon/neon.patch \ external/neon/neon_ne_set_request_flag.patch \ @@ -24,5 +34,6 @@ $(eval $(call gb_UnpackedTarball_add_patches,neon,\ external/neon/ubsan.patch \ external/neon/neon_fix_lock_token_on_if.patch \ )) +endif # vim: set noet sw=4 ts=4: diff --git a/external/neon/neon_fix_lock_timeout_windows.patch b/external/neon/neon_fix_lock_timeout_windows.patch new file mode 100644 index 000000000000..d6fe030d9e15 --- /dev/null +++ b/external/neon/neon_fix_lock_timeout_windows.patch @@ -0,0 +1,27 @@ +--- src.origin/ne_locks.c 2007-02-05 11:09:27.000000000 +0100 ++++ src/ne_locks.c 2015-11-08 17:21:52.968561488 +0100 +@@ -428,10 +428,20 @@ + if (ne_strcasecmp(timeout, "infinite") == 0) { + return NE_TIMEOUT_INFINITE; + } else if (strncasecmp(timeout, "Second-", 7) == 0) { +- long to = strtol(timeout+7, NULL, 10); +- if (to == LONG_MIN || to == LONG_MAX) +- return NE_TIMEOUT_INVALID; +- return to; ++ // according RFC 4918 the value used for lock timeout is unsigned 32 bit ++ // see: ++ // adapt it to the 'long' used internally by neon instead ++ // LONG_MAX means around 68 years. ++ unsigned long to1 = strtoul(timeout+7, NULL, 10); ++ long to; ++ if (to1 >= LONG_MAX) ++ to = LONG_MAX - 1; ++ else ++ to = (long)to1; ++ NE_DEBUG(NE_DBG_LOCKS, "Received lock timeout: %ld\n", to); ++ if (to == LONG_MIN || to == LONG_MAX) ++ return NE_TIMEOUT_INVALID; ++ return to; + } else { + return NE_TIMEOUT_INVALID; + }