Improve OCI8 NLS env creation error messages (#58925)
authorChristopher Jones <sixd@php.net>
Mon, 7 Nov 2011 20:10:41 +0000 (20:10 +0000)
committerChristopher Jones <sixd@php.net>
Mon, 7 Nov 2011 20:10:41 +0000 (20:10 +0000)
ext/oci8/oci8.c
ext/oci8/package.xml

index 275483ee2f3f7c3ed6e099814bfcfa3fb067d6bf..b943c28454cc2985f0320880af5fc0b3827e6566 100644 (file)
@@ -2901,11 +2901,20 @@ static OCIEnv *php_oci_create_env(ub2 charsetid TSRMLS_DC)
        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;
index b91b4b24486104d897941b374f550ac85aff9e3a..526336f85f9493603cfc03d5f43ace3c47e2cf4c 100644 (file)
@@ -47,6 +47,7 @@ http://pear.php.net/dtd/package-2.0.xsd">
  <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="/">