php7: redux of fix for issue #5488 5502/head
authorPhilip Prindeville <philipp@redfish-solutions.com>
Thu, 25 Jan 2018 22:19:30 +0000 (15:19 -0700)
committerPhilip Prindeville <philipp@redfish-solutions.com>
Thu, 25 Jan 2018 22:19:30 +0000 (15:19 -0700)
Upstream was a little premature on asking for a change and not
vetting it.  Here is the currently proposed fix.

Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
lang/php7/Makefile
lang/php7/patches/1012-php_iconv_string-null-out-pointer [deleted file]
lang/php7/patches/1012-php_iconv_string-null-out-pointer.patch [new file with mode: 0644]

index f1f781fe41ee83e7f91432c1c25380be7cccea28..8b6f6fb50dbb8666d25e33c18cdd6141fc507635 100644 (file)
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=php
 PKG_VERSION:=7.2.1
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_MAINTAINER:=Michael Heimpold <mhei@heimpold.de>
 
diff --git a/lang/php7/patches/1012-php_iconv_string-null-out-pointer b/lang/php7/patches/1012-php_iconv_string-null-out-pointer
deleted file mode 100644 (file)
index 5f71b7d..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-commit 8b6882d95dfe9096a22052bbff0c134b10932d20
-Author: Philip Prindeville <philipp@redfish-solutions.com>
-Date:   Wed Jan 24 18:47:19 2018 -0700
-
-    Be consistent in clearing out in php_iconv_string()
-    
-    Also, don't bother checking returned point in error case since it
-    will always be NULL (and not require free()ing, obviously).
-
-diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
-index 35dafd4..bc7f3aa 100644
---- a/ext/iconv/iconv.c
-+++ b/ext/iconv/iconv.c
-@@ -559,6 +559,8 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len,
-       size_t result;
-       zend_string *ret, *out_buffer;
-+      *out = NULL;
-+
-       /*
-         This is not the right way to get output size...
-         This is not space efficient for large text.
-@@ -984,9 +986,6 @@ static php_iconv_err_t _php_iconv_strpos(size_t *pretval,
-       err = php_iconv_string(ndl, ndl_nbytes, &ndl_buf, GENERIC_SUPERSET_NAME, enc);
-       if (err != PHP_ICONV_ERR_SUCCESS) {
--              if (ndl_buf != NULL) {
--                      zend_string_free(ndl_buf);
--              }
-               return err;
-       }
-@@ -2463,9 +2462,6 @@ PHP_NAMED_FUNCTION(php_if_iconv)
-       if (err == PHP_ICONV_ERR_SUCCESS && out_buffer != NULL) {
-               RETVAL_STR(out_buffer);
-       } else {
--              if (out_buffer != NULL) {
--                      zend_string_free(out_buffer);
--              }
-               RETURN_FALSE;
-       }
- }
diff --git a/lang/php7/patches/1012-php_iconv_string-null-out-pointer.patch b/lang/php7/patches/1012-php_iconv_string-null-out-pointer.patch
new file mode 100644 (file)
index 0000000..6dfbe51
--- /dev/null
@@ -0,0 +1,69 @@
+commit 31e53f07c26e5ac75ec2c2d99497439323dbdaf7
+Author: Philip Prindeville <philipp@redfish-solutions.com>
+Date:   Wed Jan 24 18:47:19 2018 -0700
+
+    Be consistent in clearing out in php_iconv_string()
+    
+    Also, don't bother checking returned point in error case since it
+    will always be NULL (and not require free()ing, obviously).
+
+diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
+index 35dafd4..4289242 100644
+--- a/ext/iconv/iconv.c
++++ b/ext/iconv/iconv.c
+@@ -559,6 +559,8 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len,
+       size_t result;
+       zend_string *ret, *out_buffer;
++      *out = NULL;
++
+       /*
+         This is not the right way to get output size...
+         This is not space efficient for large text.
+
+commit 3763c8f1645983b5abc37c60597e1ecc1bf89019
+Author: Philip Prindeville <philipp@redfish-solutions.com>
+Date:   Thu Jan 25 14:18:00 2018 -0700
+
+    Always free out_buf in php_iconv_string()
+
+diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
+index 4289242..807bb14 100644
+--- a/ext/iconv/iconv.c
++++ b/ext/iconv/iconv.c
+@@ -697,6 +697,7 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len,
+       iconv_close(cd);
+       if (result == (size_t)(-1)) {
++              zend_string_free(out_buf);
+               switch (errno) {
+                       case EINVAL:
+                               retval = PHP_ICONV_ERR_ILLEGAL_CHAR;
+@@ -713,7 +714,6 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len,
+                       default:
+                               /* other error */
+-                              zend_string_free(out_buf);
+                               return PHP_ICONV_ERR_UNKNOWN;
+               }
+       }
+@@ -986,9 +986,6 @@ static php_iconv_err_t _php_iconv_strpos(size_t *pretval,
+       err = php_iconv_string(ndl, ndl_nbytes, &ndl_buf, GENERIC_SUPERSET_NAME, enc);
+       if (err != PHP_ICONV_ERR_SUCCESS) {
+-              if (ndl_buf != NULL) {
+-                      zend_string_free(ndl_buf);
+-              }
+               return err;
+       }
+@@ -2465,9 +2462,6 @@ PHP_NAMED_FUNCTION(php_if_iconv)
+       if (err == PHP_ICONV_ERR_SUCCESS && out_buffer != NULL) {
+               RETVAL_STR(out_buffer);
+       } else {
+-              if (out_buffer != NULL) {
+-                      zend_string_free(out_buffer);
+-              }
+               RETURN_FALSE;
+       }
+ }