diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2014-03-05 17:23:40 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2014-03-05 17:23:40 +0400 |
| commit | 47f90144583224a29c04e7aeebbacaec9b33de0e (patch) | |
| tree | 966664e1b10b573c469e0d7a813a6e6f146d2ab4 | |
| parent | 84c092f6d623a9e58963db84c507624a13b50e17 (diff) | |
| download | php-git-47f90144583224a29c04e7aeebbacaec9b33de0e.tar.gz | |
Fixed array_nultisort() to support IS_REFERENCE
| -rw-r--r-- | ext/standard/array.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index c6806d3521..c4fd3ab6b2 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -3860,7 +3860,12 @@ PHP_FUNCTION(array_multisort) * accordingly. There can't be two sort flags of the same type after an * array, and the very first argument has to be an array. */ for (i = 0; i < argc; i++) { - if (Z_TYPE(args[i]) == IS_ARRAY) { + zval *arg = &args[i]; + + if (Z_TYPE_P(arg) == IS_REFERENCE) { + arg = Z_REFVAL_P(arg); + } + if (Z_TYPE_P(arg) == IS_ARRAY) { /* We see the next array, so we update the sort flags of * the previous array and reset the sort flags. */ if (i > 0) { @@ -3869,14 +3874,14 @@ PHP_FUNCTION(array_multisort) sort_order = PHP_SORT_ASC; sort_type = PHP_SORT_REGULAR; } - arrays[num_arrays++] = &args[i]; + arrays[num_arrays++] = arg; /* Next one may be an array or a list of sort flags. */ for (k = 0; k < MULTISORT_LAST; k++) { parse_state[k] = 1; } - } else if (Z_TYPE(args[i]) == IS_LONG) { - switch (Z_LVAL(args[i]) & ~PHP_SORT_FLAG_CASE) { + } else if (Z_TYPE_P(arg) == IS_LONG) { + switch (Z_LVAL_P(arg) & ~PHP_SORT_FLAG_CASE) { case PHP_SORT_ASC: case PHP_SORT_DESC: /* flag allowed here */ |
