## Changed functions

### PHP Core

- crypt() will now raise an `E_NOTICE` error if the `salt` parameter is omitted.
- substr_compare() will now accept `0` for its `length` parameter.
- unserialize() will now fail if passed serialised data that has been manipulated to attempt to instantiate an object without calling its constructor.

### cURL

- Uploads using the `@file` syntax are now only supported if the `CURLOPT_SAFE_UPLOAD` option is set to `FALSE`. CURLFile should be used instead.

### Mcrypt

- The `source` parameter of mcrypt_create_iv() now defaults to `MCRYPT_DEV_URANDOM` instead of `MCRYPT_DEV_RANDOM`.

### OpenSSL

- stream_socket_enable_crypto() now allows the `crypto_type` parameter to be optional if the stream's SSL context includes the new `crypto_type` option.

### PostgreSQL

- pg_insert(), pg_select(), pg_update() and pg_delete() are no longer experimental.
- pg_send_execute(), pg_send_prepare(), pg_send_query() and pg_send_query_params() will no longer block until query write completion if the underlying socket stream for the database connection is set to non-blocking mode.

### Reflection

- ReflectionClass::newInstanceWithoutConstructor() now allows non-final internal classes to be instantiated.

### XMLReader

- XMLReader::getAttributeNs() and XMLReader::getAttributeNo() now return `NULL` if the attribute could not be found, like XMLReader::getAttribute().