Commit d367d41d authored by Bruce Momjian's avatar Bruce Momjian

Fix file descriptor leaks in pg_upgrade in failure code paths.

parent 51c01244
...@@ -515,9 +515,11 @@ check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster) ...@@ -515,9 +515,11 @@ check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster)
PQfinish(conn); PQfinish(conn);
} }
if (script)
fclose(script);
if (found) if (found)
{ {
fclose(script);
pg_log(PG_REPORT, "fatal\n"); pg_log(PG_REPORT, "fatal\n");
pg_log(PG_FATAL, pg_log(PG_FATAL,
"| Your installation contains \"/contrib/isn\" functions\n" "| Your installation contains \"/contrib/isn\" functions\n"
...@@ -616,9 +618,11 @@ check_for_reg_data_type_usage(ClusterInfo *cluster) ...@@ -616,9 +618,11 @@ check_for_reg_data_type_usage(ClusterInfo *cluster)
PQfinish(conn); PQfinish(conn);
} }
if (script)
fclose(script);
if (found) if (found)
{ {
fclose(script);
pg_log(PG_REPORT, "fatal\n"); pg_log(PG_REPORT, "fatal\n");
pg_log(PG_FATAL, pg_log(PG_FATAL,
"| Your installation contains one of the reg* data types in\n" "| Your installation contains one of the reg* data types in\n"
......
...@@ -302,7 +302,10 @@ pg_scandir_internal(const char *dirname, ...@@ -302,7 +302,10 @@ pg_scandir_internal(const char *dirname,
(size_t) ((name_num + 1) * sizeof(struct dirent *))); (size_t) ((name_num + 1) * sizeof(struct dirent *)));
if (*namelist == NULL) if (*namelist == NULL)
{
closedir(dirdesc);
return -1; return -1;
}
entrysize = sizeof(struct dirent) - sizeof(direntry->d_name) + entrysize = sizeof(struct dirent) - sizeof(direntry->d_name) +
strlen(direntry->d_name) + 1; strlen(direntry->d_name) + 1;
...@@ -310,7 +313,10 @@ pg_scandir_internal(const char *dirname, ...@@ -310,7 +313,10 @@ pg_scandir_internal(const char *dirname,
(*namelist)[name_num] = (struct dirent *) malloc(entrysize); (*namelist)[name_num] = (struct dirent *) malloc(entrysize);
if ((*namelist)[name_num] == NULL) if ((*namelist)[name_num] == NULL)
{
closedir(dirdesc);
return -1; return -1;
}
memcpy((*namelist)[name_num], direntry, entrysize); memcpy((*namelist)[name_num], direntry, entrysize);
......
...@@ -144,11 +144,9 @@ get_major_server_version(ClusterInfo *cluster) ...@@ -144,11 +144,9 @@ get_major_server_version(ClusterInfo *cluster)
if (fscanf(version_fd, "%63s", cluster->major_version_str) == 0 || if (fscanf(version_fd, "%63s", cluster->major_version_str) == 0 ||
sscanf(cluster->major_version_str, "%d.%d", &integer_version, sscanf(cluster->major_version_str, "%d.%d", &integer_version,
&fractional_version) != 2) &fractional_version) != 2)
{
pg_log(PG_FATAL, "could not get version from %s\n", datadir); pg_log(PG_FATAL, "could not get version from %s\n", datadir);
fclose(version_fd);
return 0; fclose(version_fd);
}
return (100 * integer_version + fractional_version) * 100; return (100 * integer_version + fractional_version) * 100;
} }
......
...@@ -62,10 +62,11 @@ new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, bool check_mode) ...@@ -62,10 +62,11 @@ new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, bool check_mode)
PQfinish(conn); PQfinish(conn);
} }
if (script)
fclose(script);
if (found) if (found)
{ {
if (!check_mode)
fclose(script);
report_status(PG_WARNING, "warning"); report_status(PG_WARNING, "warning");
if (check_mode) if (check_mode)
pg_log(PG_WARNING, "\n" pg_log(PG_WARNING, "\n"
......
...@@ -87,9 +87,11 @@ old_8_3_check_for_name_data_type_usage(ClusterInfo *cluster) ...@@ -87,9 +87,11 @@ old_8_3_check_for_name_data_type_usage(ClusterInfo *cluster)
PQfinish(conn); PQfinish(conn);
} }
if (script)
fclose(script);
if (found) if (found)
{ {
fclose(script);
pg_log(PG_REPORT, "fatal\n"); pg_log(PG_REPORT, "fatal\n");
pg_log(PG_FATAL, pg_log(PG_FATAL,
"| Your installation contains the \"name\" data type in\n" "| Your installation contains the \"name\" data type in\n"
...@@ -175,9 +177,11 @@ old_8_3_check_for_tsquery_usage(ClusterInfo *cluster) ...@@ -175,9 +177,11 @@ old_8_3_check_for_tsquery_usage(ClusterInfo *cluster)
PQfinish(conn); PQfinish(conn);
} }
if (script)
fclose(script);
if (found) if (found)
{ {
fclose(script);
pg_log(PG_REPORT, "fatal\n"); pg_log(PG_REPORT, "fatal\n");
pg_log(PG_FATAL, pg_log(PG_FATAL,
"| Your installation contains the \"tsquery\" data type.\n" "| Your installation contains the \"tsquery\" data type.\n"
...@@ -314,10 +318,11 @@ old_8_3_rebuild_tsvector_tables(ClusterInfo *cluster, bool check_mode) ...@@ -314,10 +318,11 @@ old_8_3_rebuild_tsvector_tables(ClusterInfo *cluster, bool check_mode)
PQfinish(conn); PQfinish(conn);
} }
if (script)
fclose(script);
if (found) if (found)
{ {
if (!check_mode)
fclose(script);
report_status(PG_WARNING, "warning"); report_status(PG_WARNING, "warning");
if (check_mode) if (check_mode)
pg_log(PG_WARNING, "\n" pg_log(PG_WARNING, "\n"
...@@ -424,10 +429,11 @@ old_8_3_invalidate_hash_gin_indexes(ClusterInfo *cluster, bool check_mode) ...@@ -424,10 +429,11 @@ old_8_3_invalidate_hash_gin_indexes(ClusterInfo *cluster, bool check_mode)
PQfinish(conn); PQfinish(conn);
} }
if (script)
fclose(script);
if (found) if (found)
{ {
if (!check_mode)
fclose(script);
report_status(PG_WARNING, "warning"); report_status(PG_WARNING, "warning");
if (check_mode) if (check_mode)
pg_log(PG_WARNING, "\n" pg_log(PG_WARNING, "\n"
...@@ -553,10 +559,11 @@ old_8_3_invalidate_bpchar_pattern_ops_indexes(ClusterInfo *cluster, ...@@ -553,10 +559,11 @@ old_8_3_invalidate_bpchar_pattern_ops_indexes(ClusterInfo *cluster,
PQfinish(conn); PQfinish(conn);
} }
if (script)
fclose(script);
if (found) if (found)
{ {
if (!check_mode)
fclose(script);
report_status(PG_WARNING, "warning"); report_status(PG_WARNING, "warning");
if (check_mode) if (check_mode)
pg_log(PG_WARNING, "\n" pg_log(PG_WARNING, "\n"
...@@ -672,7 +679,8 @@ old_8_3_create_sequence_script(ClusterInfo *cluster) ...@@ -672,7 +679,8 @@ old_8_3_create_sequence_script(ClusterInfo *cluster)
PQfinish(conn); PQfinish(conn);
} }
if (found)
if (script)
fclose(script); fclose(script);
check_ok(); check_ok();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment