blob: 0a08cd578c3b0c7e157ee86c071c6c63692c2b5a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
From 3d2f71927f26c65ce7a631793ece893a86bc818a Mon Sep 17 00:00:00 2001
From: Remi Collet <fedora@famillecollet.com>
Date: Tue, 27 Oct 2015 08:02:26 +0100
Subject: [PATCH] don't zero interned string
---
libsodium.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/libsodium.c b/libsodium.c
index bc03b49..8bd1036 100644
--- a/libsodium.c
+++ b/libsodium.c
@@ -396,15 +396,21 @@ PHP_FUNCTION(sodium_memzero)
return;
}
ZVAL_DEREF(buf_zv);
+ if (Z_TYPE_P(buf_zv) != IS_STRING) {
+ zend_error(E_ERROR, "memzero: a PHP string is required");
+ }
#if PHP_MAJOR_VERSION >= 7
- if (Z_REFCOUNTED_P(buf_zv) == 0 || Z_REFCOUNT(*buf_zv) > 1) {
+ if (IS_INTERNED(Z_STR(*buf_zv)) || Z_REFCOUNTED_P(buf_zv) == 0 || Z_REFCOUNT(*buf_zv) > 1) {
convert_to_null(buf_zv);
return;
}
#endif
- if (Z_TYPE_P(buf_zv) != IS_STRING) {
- zend_error(E_ERROR, "memzero: a PHP string is required");
+#if PHP_MAJOR_VERSION < 7 && defined(IS_INTERNED)
+ if (IS_INTERNED(Z_STRVAL(*buf_zv))) {
+ convert_to_null(buf_zv);
+ return;
}
+#endif
buf = Z_STRVAL(*buf_zv);
buf_len = Z_STRLEN(*buf_zv);
if (buf_len > 0) {
|