From: Yoshiyuki Asaba Date: Mon, 22 Jan 2007 11:36:51 +0000 (+0000) Subject: Fixed SIGSEGV using DBD-Pg. X-Git-Tag: V3_2~11 X-Git-Url: http://git.postgresql.org/gitweb/static/backend_dirs.html?a=commitdiff_plain;h=c85d93209d8288528f19a6814b99e9dcfe7957f6;p=pgpool1.git Fixed SIGSEGV using DBD-Pg. Reported by Kenichi Sawada. --- diff --git a/pool_process_query.c b/pool_process_query.c index 8062b0e..056bb5e 100644 --- a/pool_process_query.c +++ b/pool_process_query.c @@ -2620,7 +2620,6 @@ POOL_STATUS SimpleForwardToBackend(char kind, POOL_CONNECTION *frontend, POOL_CO int len; int sendlen; char *p; - int name_len; char *name = NULL; if (pool_write(MASTER(backend), &kind, 1)) @@ -2710,40 +2709,35 @@ POOL_STATUS SimpleForwardToBackend(char kind, POOL_CONNECTION *frontend, POOL_CO stmt = unnamed_statement; else { - name = malloc(strlen(stmt_name) + 3); + name = strdup(stmt_name); if (name == NULL) { - pool_error("SimpleForwardToBackend: malloc failed: %s", strerror(errno)); + pool_error("SimpleForwardToBackend: strdup failed: %s", strerror(errno)); return POOL_END; } - sprintf(name, "\"%s\"", stmt_name); stmt = lookup_prepared_statement_by_statement(&prepared_list, name); free(name); } - if (stmt == NULL) - free(name); - else if (*portal_name == '\0') + if (*portal_name == '\0') unnamed_portal = stmt; else { if (stmt->portal_name) free(stmt->portal_name); - stmt->portal_name = strdup(stmt->portal_name); + stmt->portal_name = strdup(portal_name); } } else if (kind == 'C' && *p == 'S' && *(p + 1)) { - name_len = strlen(p + 1) + 3; - name = malloc(name_len); + name = strdup(p+1); if (name == NULL) { - pool_error("SimpleForwardToBackend: malloc failed: %s", strerror(errno)); + pool_error("SimpleForwardToBackend: strdup failed: %s", strerror(errno)); return POOL_END; } - sprintf(name, "\"%s\"", p + 1); pending_function = del_prepared_list; pending_prepared_stmt = malloc(sizeof(PreparedStatement)); if (pending_prepared_stmt == NULL)