diff options
| author | Christopher Jones <sixd@php.net> | 2015-10-07 20:24:49 +1100 |
|---|---|---|
| committer | Christopher Jones <sixd@php.net> | 2015-10-07 20:24:49 +1100 |
| commit | 4a57f1821b2ff555d1d57bb961c1ceadbcffc115 (patch) | |
| tree | eaf5bb2a533c9c7c534ce154ae176c18c2c1c028 | |
| parent | c0ca731d7a418502c26bee84f7b71e05f66faeef (diff) | |
| download | php-git-4a57f1821b2ff555d1d57bb961c1ceadbcffc115.tar.gz | |
Fix mem leak and improve test portability (Senthil)
| -rw-r--r-- | ext/oci8/oci8.c | 24 | ||||
| -rw-r--r-- | ext/oci8/tests/bug27303_2_11gR1.phpt | 202 |
2 files changed, 121 insertions, 105 deletions
diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c index eed4a1c8f8..2bb57b3373 100644 --- a/ext/oci8/oci8.c +++ b/ext/oci8/oci8.c @@ -1922,6 +1922,10 @@ php_oci_connection *php_oci_do_connect_ex(char *username, int username_len, char smart_str_append_unsigned_ex(&hashed_details, session_mode, 0); smart_str_0(&hashed_details); + if (persistent) { + smart_str_appendl_ex(&hashed_details, "pc", sizeof("pc") - 1, 0); + } + /* make it lowercase */ /* PHPNG TODO is this safe to do? What about interned strings? */ php_strtolower(hashed_details.s->val, hashed_details.s->len); @@ -1996,14 +2000,20 @@ php_oci_connection *php_oci_do_connect_ex(char *username, int username_len, char if (!ping_done && (*(connection->next_pingp) > 0) && (timestamp >= *(connection->next_pingp)) && !php_oci_connection_ping(connection)) { /* server died */ } else { - php_oci_connection *tmp; + php_oci_connection *tmp = (php_oci_connection *) NULL; + zval *tmp_val = (zval *) NULL; /* okay, the connection is open and the server is still alive */ connection->used_this_request = 1; - tmp = (php_oci_connection *)connection->id->ptr; - - if (tmp != NULL && tmp->hash_key->len == hashed_details.s->len && - memcmp(tmp->hash_key->val, hashed_details.s->val, tmp->hash_key->len) == 0) { + tmp_val = zend_hash_index_find(&EG(regular_list), connection->id->handle); + if ((tmp_val != NULL) && (Z_TYPE_P(tmp_val) == IS_RESOURCE)) { + tmp = Z_RES_VAL_P(tmp_val); + } + + if ((tmp_val != NULL) && (tmp != NULL) && + (tmp->hash_key->len == hashed_details.s->len) && + (memcmp(tmp->hash_key->val, hashed_details.s->val, tmp->hash_key->len) == 0)) { + connection = tmp; ++GC_REFCOUNT(connection->id); /* do nothing */ } else { @@ -2366,6 +2376,10 @@ static int php_oci_connection_close(php_oci_connection *connection) connection->private_spool = NULL; } + if (GC_REFCOUNT(connection->hash_key) >= 2) { + zend_hash_del(&EG(regular_list), connection->hash_key); + } + if (connection->hash_key) { pefree(connection->hash_key, connection->is_persistent); connection->hash_key = NULL; diff --git a/ext/oci8/tests/bug27303_2_11gR1.phpt b/ext/oci8/tests/bug27303_2_11gR1.phpt index 06133e0115..d9a68b8cc7 100644 --- a/ext/oci8/tests/bug27303_2_11gR1.phpt +++ b/ext/oci8/tests/bug27303_2_11gR1.phpt @@ -10,6 +10,8 @@ if (!(isset($matches[0]) && $matches[1] < 12)) { die("skip expected output only valid when using pre-Oracle 12c database"); } ?> +--ENV-- +NLS_LANG= --FILE-- <?php @@ -153,104 +155,104 @@ string(2) "96" string(2) "97" string(2) "98" string(2) "99" -string(2) "10" -string(2) "10" -string(2) "10" -string(2) "10" -string(2) "10" -string(2) "10" -string(2) "10" -string(2) "10" -string(2) "10" -string(2) "10" -string(2) "11" -string(2) "11" -string(2) "11" -string(2) "11" -string(2) "11" -string(2) "11" -string(2) "11" -string(2) "11" -string(2) "11" -string(2) "11" -string(2) "12" -string(2) "12" -string(2) "12" -string(2) "12" -string(2) "12" -string(2) "12" -string(2) "12" -string(2) "12" -string(2) "12" -string(2) "12" -string(2) "13" -string(2) "13" -string(2) "13" -string(2) "13" -string(2) "13" -string(2) "13" -string(2) "13" -string(2) "13" -string(2) "13" -string(2) "13" -string(2) "14" -string(2) "14" -string(2) "14" -string(2) "14" -string(2) "14" -string(2) "14" -string(2) "14" -string(2) "14" -string(2) "14" -string(2) "14" -string(2) "15" -string(2) "15" -string(2) "15" -string(2) "15" -string(2) "15" -string(2) "15" -string(2) "15" -string(2) "15" -string(2) "15" -string(2) "15" -string(2) "16" -string(2) "16" -string(2) "16" -string(2) "16" -string(2) "16" -string(2) "16" -string(2) "16" -string(2) "16" -string(2) "16" -string(2) "16" -string(2) "17" -string(2) "17" -string(2) "17" -string(2) "17" -string(2) "17" -string(2) "17" -string(2) "17" -string(2) "17" -string(2) "17" -string(2) "17" -string(2) "18" -string(2) "18" -string(2) "18" -string(2) "18" -string(2) "18" -string(2) "18" -string(2) "18" -string(2) "18" -string(2) "18" -string(2) "18" -string(2) "19" -string(2) "19" -string(2) "19" -string(2) "19" -string(2) "19" -string(2) "19" -string(2) "19" -string(2) "19" -string(2) "19" -string(2) "19" +string(3) "100" +string(3) "101" +string(3) "102" +string(3) "103" +string(3) "104" +string(3) "105" +string(3) "106" +string(3) "107" +string(3) "108" +string(3) "109" +string(3) "110" +string(3) "111" +string(3) "112" +string(3) "113" +string(3) "114" +string(3) "115" +string(3) "116" +string(3) "117" +string(3) "118" +string(3) "119" +string(3) "120" +string(3) "121" +string(3) "122" +string(3) "123" +string(3) "124" +string(3) "125" +string(3) "126" +string(3) "127" +string(3) "128" +string(3) "129" +string(3) "130" +string(3) "131" +string(3) "132" +string(3) "133" +string(3) "134" +string(3) "135" +string(3) "136" +string(3) "137" +string(3) "138" +string(3) "139" +string(3) "140" +string(3) "141" +string(3) "142" +string(3) "143" +string(3) "144" +string(3) "145" +string(3) "146" +string(3) "147" +string(3) "148" +string(3) "149" +string(3) "150" +string(3) "151" +string(3) "152" +string(3) "153" +string(3) "154" +string(3) "155" +string(3) "156" +string(3) "157" +string(3) "158" +string(3) "159" +string(3) "160" +string(3) "161" +string(3) "162" +string(3) "163" +string(3) "164" +string(3) "165" +string(3) "166" +string(3) "167" +string(3) "168" +string(3) "169" +string(3) "170" +string(3) "171" +string(3) "172" +string(3) "173" +string(3) "174" +string(3) "175" +string(3) "176" +string(3) "177" +string(3) "178" +string(3) "179" +string(3) "180" +string(3) "181" +string(3) "182" +string(3) "183" +string(3) "184" +string(3) "185" +string(3) "186" +string(3) "187" +string(3) "188" +string(3) "189" +string(3) "190" +string(3) "191" +string(3) "192" +string(3) "193" +string(3) "194" +string(3) "195" +string(3) "196" +string(3) "197" +string(3) "198" +string(3) "199" Done |
