diff options
author | Anatol Belski <ab@php.net> | 2018-09-18 14:16:06 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2018-09-21 15:54:14 +0200 |
commit | 91b2b6c65d544f39c45498ebafbab84b81d465b5 (patch) | |
tree | 0e95063199c06b57d48f370903bc765c7491c0c8 /ext/pcre/pcre2lib/pcre2_serialize.c | |
parent | 72231ed74746f09fb3096761b77cb5130309ca1e (diff) | |
download | php-git-91b2b6c65d544f39c45498ebafbab84b81d465b5.tar.gz |
Upgrade PCRE2 to 10.32
(cherry picked from commit d918e0776b5168aed2707b0ca500589844f0faa8)
Diffstat (limited to 'ext/pcre/pcre2lib/pcre2_serialize.c')
-rw-r--r-- | ext/pcre/pcre2lib/pcre2_serialize.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/ext/pcre/pcre2lib/pcre2_serialize.c b/ext/pcre/pcre2lib/pcre2_serialize.c index d2cc603cbb..cec1a035d1 100644 --- a/ext/pcre/pcre2lib/pcre2_serialize.c +++ b/ext/pcre/pcre2lib/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; } |