summaryrefslogtreecommitdiff
path: root/ext/standard/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/file.c')
-rw-r--r--ext/standard/file.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/ext/standard/file.c b/ext/standard/file.c
index d02e86d5ca..84cc8020e7 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -1320,6 +1320,7 @@ PHPAPI PHP_FUNCTION(fwrite)
int ret, type;
int num_bytes;
void *what;
+ char *buffer = NULL;
switch (ZEND_NUM_ARGS()) {
case 2:
@@ -1347,11 +1348,14 @@ PHPAPI PHP_FUNCTION(fwrite)
ZEND_VERIFY_RESOURCE(what);
if (!arg3 && PG(magic_quotes_runtime)) {
- zval_copy_ctor(*arg2);
- php_stripslashes(Z_STRVAL_PP(arg2), &num_bytes TSRMLS_CC);
+ buffer = estrndup(Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2));
+ php_stripslashes(buffer, &num_bytes TSRMLS_CC);
}
- ret = php_stream_write((php_stream *) what, Z_STRVAL_PP(arg2), num_bytes);
+ ret = php_stream_write((php_stream *) what, buffer ? buffer : Z_STRVAL_PP(arg2), num_bytes);
+ if (buffer) {
+ efree(buffer);
+ }
RETURN_LONG(ret);
}