sixd                                     Mon, 07 Nov 2011 20:10:41 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=318888

Log:
Improve OCI8 NLS env creation error messages (#58925)

Bug: https://bugs.php.net/58925 (Assigned) No error information available when 
php_oci_create_env fails
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/ext/oci8/oci8.c
    U   php/php-src/branches/PHP_5_3/ext/oci8/package.xml
    U   php/php-src/branches/PHP_5_4/ext/oci8/oci8.c
    U   php/php-src/branches/PHP_5_4/ext/oci8/package.xml
    U   php/php-src/trunk/ext/oci8/oci8.c
    U   php/php-src/trunk/ext/oci8/package.xml

Modified: php/php-src/branches/PHP_5_3/ext/oci8/oci8.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/oci8/oci8.c        2011-11-07 19:23:17 UTC 
(rev 318887)
+++ php/php-src/branches/PHP_5_3/ext/oci8/oci8.c        2011-11-07 20:10:41 UTC 
(rev 318888)
@@ -2901,11 +2901,20 @@
        PHP_OCI_CALL_RETURN(OCI_G(errcode), OCIEnvNlsCreate, (&retenv, 
OCI_G(events) ? PHP_OCI_INIT_MODE | OCI_EVENTS : PHP_OCI_INIT_MODE, 0, NULL, 
NULL, NULL, 0, NULL, charsetid, charsetid));

        if (OCI_G(errcode) != OCI_SUCCESS) {
+               sb4   ora_error_code = 0;
+               text  ora_msg_buf[OCI_ERROR_MAXMSG_SIZE];  /* Use traditional 
smaller size: non-PL/SQL errors should fit and it keeps the stack smaller */
+
 #ifdef HAVE_OCI_INSTANT_CLIENT
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCIEnvNlsCreate() 
failed. There is something wrong with your system - please check that " 
PHP_OCI8_LIB_PATH_MSG " includes the directory with Oracle Instant Client 
libraries");
 #else
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCIEnvNlsCreate() 
failed. There is something wrong with your system - please check that 
ORACLE_HOME and " PHP_OCI8_LIB_PATH_MSG " are set and point to the right 
directories");
 #endif
+               if (retenv
+                       && OCIErrorGet(retenv, (ub4)1, NULL, &ora_error_code, 
ora_msg_buf, (ub4)OCI_ERROR_MAXMSG_SIZE, (ub4)OCI_HTYPE_ENV) == OCI_SUCCESS
+                       && *ora_msg_buf) {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", 
ora_msg_buf);
+               }
+
                return NULL;
        }
        return retenv;

Modified: php/php-src/branches/PHP_5_3/ext/oci8/package.xml
===================================================================
--- php/php-src/branches/PHP_5_3/ext/oci8/package.xml   2011-11-07 19:23:17 UTC 
(rev 318887)
+++ php/php-src/branches/PHP_5_3/ext/oci8/package.xml   2011-11-07 20:10:41 UTC 
(rev 318888)
@@ -47,6 +47,7 @@
  <license uri="http://www.php.net/license";>PHP</license>
  <notes>
   Increased maximum possible Oracle DB error message length
+  Improve internal initalization failure error messages
  </notes>
  <contents>
   <dir name="/">

Modified: php/php-src/branches/PHP_5_4/ext/oci8/oci8.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/oci8/oci8.c        2011-11-07 19:23:17 UTC 
(rev 318887)
+++ php/php-src/branches/PHP_5_4/ext/oci8/oci8.c        2011-11-07 20:10:41 UTC 
(rev 318888)
@@ -2901,11 +2901,20 @@
        PHP_OCI_CALL_RETURN(OCI_G(errcode), OCIEnvNlsCreate, (&retenv, 
OCI_G(events) ? PHP_OCI_INIT_MODE | OCI_EVENTS : PHP_OCI_INIT_MODE, 0, NULL, 
NULL, NULL, 0, NULL, charsetid, charsetid));

        if (OCI_G(errcode) != OCI_SUCCESS) {
+               sb4   ora_error_code = 0;
+               text  ora_msg_buf[OCI_ERROR_MAXMSG_SIZE];  /* Use traditional 
smaller size: non-PL/SQL errors should fit and it keeps the stack smaller */
+
 #ifdef HAVE_OCI_INSTANT_CLIENT
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCIEnvNlsCreate() 
failed. There is something wrong with your system - please check that " 
PHP_OCI8_LIB_PATH_MSG " includes the directory with Oracle Instant Client 
libraries");
 #else
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCIEnvNlsCreate() 
failed. There is something wrong with your system - please check that 
ORACLE_HOME and " PHP_OCI8_LIB_PATH_MSG " are set and point to the right 
directories");
 #endif
+               if (retenv
+                       && OCIErrorGet(retenv, (ub4)1, NULL, &ora_error_code, 
ora_msg_buf, (ub4)OCI_ERROR_MAXMSG_SIZE, (ub4)OCI_HTYPE_ENV) == OCI_SUCCESS
+                       && *ora_msg_buf) {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", 
ora_msg_buf);
+               }
+
                return NULL;
        }
        return retenv;

Modified: php/php-src/branches/PHP_5_4/ext/oci8/package.xml
===================================================================
--- php/php-src/branches/PHP_5_4/ext/oci8/package.xml   2011-11-07 19:23:17 UTC 
(rev 318887)
+++ php/php-src/branches/PHP_5_4/ext/oci8/package.xml   2011-11-07 20:10:41 UTC 
(rev 318888)
@@ -47,6 +47,7 @@
  <license uri="http://www.php.net/license";>PHP</license>
  <notes>
   Increased maximum possible Oracle DB error message length
+  Improve internal initalization failure error messages
  </notes>
  <contents>
   <dir name="/">

Modified: php/php-src/trunk/ext/oci8/oci8.c
===================================================================
--- php/php-src/trunk/ext/oci8/oci8.c   2011-11-07 19:23:17 UTC (rev 318887)
+++ php/php-src/trunk/ext/oci8/oci8.c   2011-11-07 20:10:41 UTC (rev 318888)
@@ -2901,11 +2901,20 @@
        PHP_OCI_CALL_RETURN(OCI_G(errcode), OCIEnvNlsCreate, (&retenv, 
OCI_G(events) ? PHP_OCI_INIT_MODE | OCI_EVENTS : PHP_OCI_INIT_MODE, 0, NULL, 
NULL, NULL, 0, NULL, charsetid, charsetid));

        if (OCI_G(errcode) != OCI_SUCCESS) {
+               sb4   ora_error_code = 0;
+               text  ora_msg_buf[OCI_ERROR_MAXMSG_SIZE];  /* Use traditional 
smaller size: non-PL/SQL errors should fit and it keeps the stack smaller */
+
 #ifdef HAVE_OCI_INSTANT_CLIENT
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCIEnvNlsCreate() 
failed. There is something wrong with your system - please check that " 
PHP_OCI8_LIB_PATH_MSG " includes the directory with Oracle Instant Client 
libraries");
 #else
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCIEnvNlsCreate() 
failed. There is something wrong with your system - please check that 
ORACLE_HOME and " PHP_OCI8_LIB_PATH_MSG " are set and point to the right 
directories");
 #endif
+               if (retenv
+                       && OCIErrorGet(retenv, (ub4)1, NULL, &ora_error_code, 
ora_msg_buf, (ub4)OCI_ERROR_MAXMSG_SIZE, (ub4)OCI_HTYPE_ENV) == OCI_SUCCESS
+                       && *ora_msg_buf) {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", 
ora_msg_buf);
+               }
+
                return NULL;
        }
        return retenv;

Modified: php/php-src/trunk/ext/oci8/package.xml
===================================================================
--- php/php-src/trunk/ext/oci8/package.xml      2011-11-07 19:23:17 UTC (rev 
318887)
+++ php/php-src/trunk/ext/oci8/package.xml      2011-11-07 20:10:41 UTC (rev 
318888)
@@ -47,6 +47,7 @@
  <license uri="http://www.php.net/license";>PHP</license>
  <notes>
   Increased maximum possible Oracle DB error message length
+  Improve internal initalization failure error messages
  </notes>
  <contents>
   <dir name="/">

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to