summaryrefslogtreecommitdiff
path: root/ext/pgsql/pgsql.c
diff options
context:
space:
mode:
authorYasuo Ohgaki <yohgaki@php.net>2014-01-15 13:32:15 +0900
committerYasuo Ohgaki <yohgaki@php.net>2014-01-15 13:32:15 +0900
commitd0924c2500f06129ac2b66bb022be4dcc1f0bb7e (patch)
treee8c8fd69c0b7cabca5547a7e1252a795779b7b87 /ext/pgsql/pgsql.c
parent167eaedcbdb494c87c4f83d2897a9fdb614e7062 (diff)
downloadphp-git-d0924c2500f06129ac2b66bb022be4dcc1f0bb7e.tar.gz
Fixed pg_version() crash with older postgresql
Diffstat (limited to 'ext/pgsql/pgsql.c')
-rw-r--r--ext/pgsql/pgsql.c41
1 files changed, 31 insertions, 10 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 29a5b1082b..d51389fcfd 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -1504,17 +1504,38 @@ static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type
add_assoc_long(return_value, "protocol", PQprotocolVersion(pgsql));
#if HAVE_PQPARAMETERSTATUS
if (PQprotocolVersion(pgsql) >= 3) {
+ char *tmp;
add_assoc_string(return_value, "server", (char*)PQparameterStatus(pgsql, "server_version"), 1);
- add_assoc_string(return_value, "server_encoding", (char*)PQparameterStatus(pgsql, "server_encoding"), 1);
- add_assoc_string(return_value, "application_name", (char*)PQparameterStatus(pgsql, "application_name"), 1);
- add_assoc_string(return_value, "is_superuser", (char*)PQparameterStatus(pgsql, "is_superuser"), 1);
- add_assoc_string(return_value, "session_authorization", (char*)PQparameterStatus(pgsql, "session_authorization"), 1);
- add_assoc_string(return_value, "DateStyle", (char*)PQparameterStatus(pgsql, "DateStyle"), 1);
- add_assoc_string(return_value, "IntervalStyle", (char*)PQparameterStatus(pgsql, "IntervalStyle"), 1);
- add_assoc_string(return_value, "TimeZone", (char*)PQparameterStatus(pgsql, "TimeZone"), 1);
- add_assoc_string(return_value, "integer_datetimes", (char*)PQparameterStatus(pgsql, "integer_datetimes"), 1);
- add_assoc_string(return_value, "standard_conforming_strings", (char*)PQparameterStatus(pgsql, "standard_conforming_strings"), 1);
- add_assoc_string(return_value, "server_encoding", (char*)PQparameterStatus(pgsql, "server_encoding"), 1);
+ if ((tmp = (char*)PQparameterStatus(pgsql, "server_encoding"))) {
+ add_assoc_string(return_value, "server_encoding", tmp, 1);
+ }
+ if ((tmp = (char*)PQparameterStatus(pgsql, "application_name"))) {
+ add_assoc_string(return_value, "application_name", tmp, 1);
+ }
+ if ((tmp = (char*)PQparameterStatus(pgsql, "is_superuser"))) {
+ add_assoc_string(return_value, "is_superuser", tmp, 1);
+ }
+ if ((tmp = (char*)PQparameterStatus(pgsql, "session_authorization"))) {
+ add_assoc_string(return_value, "session_authorization", tmp, 1);
+ }
+ if ((tmp = (char*)PQparameterStatus(pgsql, "DateStyle"))) {
+ add_assoc_string(return_value, "DateStyle", tmp, 1);
+ }
+ if ((tmp = (char*)PQparameterStatus(pgsql, "IntervalStyle"))) {
+ add_assoc_string(return_value, "IntervalStyle", tmp, 1);
+ }
+ if ((tmp = (char*)PQparameterStatus(pgsql, "TimeZone"))) {
+ add_assoc_string(return_value, "TimeZone", tmp, 1);
+ }
+ if ((tmp = (char*)PQparameterStatus(pgsql, "integer_datetimes"))) {
+ add_assoc_string(return_value, "integer_datetimes", tmp, 1);
+ }
+ if ((tmp = (char*)PQparameterStatus(pgsql, "standard_conforming_strings"))) {
+ add_assoc_string(return_value, "standard_conforming_strings", tmp, 1);
+ }
+ if ((tmp = (char*)PQparameterStatus(pgsql, "server_encoding"))) {
+ add_assoc_string(return_value, "server_encoding", tmp, 1);
+ }
}
#endif
#endif