summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/pcre2/src/pcre2_serialize.c
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2018-10-01 12:24:08 +0200
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2018-10-18 21:14:48 +0000
commit44eeeb8e816fbdcd77ad734cfe7a7ec28da1c5ed (patch)
treef6a435e98de7235ac4c40253d6e20cf1d18f1e4e /src/3rdparty/pcre2/src/pcre2_serialize.c
parent6599c1f75832cc9286a3bf88c6b179d006dbb96e (diff)
Upgrade PCRE2 to 10.32
[ChangeLog][Third-Party Code] PCRE2 was updated to version 10.32. Change-Id: Id3bf7df0003f626cd1135d0508a5a489ff02f1e5 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/3rdparty/pcre2/src/pcre2_serialize.c')
-rw-r--r--src/3rdparty/pcre2/src/pcre2_serialize.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/3rdparty/pcre2/src/pcre2_serialize.c b/src/3rdparty/pcre2/src/pcre2_serialize.c
index d2cc603cbb..cec1a035d1 100644
--- a/src/3rdparty/pcre2/src/pcre2_serialize.c
+++ b/src/3rdparty/pcre2/src/pcre2_serialize.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2017 University of Cambridge
+ New API code Copyright (c) 2016-2018 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -127,7 +127,25 @@ dst_bytes += tables_length;
for (i = 0; i < number_of_codes; i++)
{
re = (const pcre2_real_code *)(codes[i]);
- memcpy(dst_bytes, (char *)re, re->blocksize);
+ (void)memcpy(dst_bytes, (char *)re, re->blocksize);
+
+ /* Certain fields in the compiled code block are re-set during
+ deserialization. In order to ensure that the serialized data stream is always
+ the same for the same pattern, set them to zero here. We can't assume the
+ copy of the pattern is correctly aligned for accessing the fields as part of
+ a structure. Note the use of sizeof(void *) in the second of these, to
+ specify the size of a pointer. If sizeof(uint8_t *) is used (tables is a
+ pointer to uint8_t), gcc gives a warning because the first argument is also a
+ pointer to uint8_t. Casting the first argument to (void *) can stop this, but
+ it didn't stop Coverity giving the same complaint. */
+
+ (void)memset(dst_bytes + offsetof(pcre2_real_code, memctl), 0,
+ sizeof(pcre2_memctl));
+ (void)memset(dst_bytes + offsetof(pcre2_real_code, tables), 0,
+ sizeof(void *));
+ (void)memset(dst_bytes + offsetof(pcre2_real_code, executable_jit), 0,
+ sizeof(void *));
+
dst_bytes += re->blocksize;
}