Remove redundant null pointer checks before free()

Per applicable standards, free() with a null pointer is a no-op.
Systems that don't observe that are ancient and no longer relevant.
Some PostgreSQL code already required this behavior, so this change
does not introduce any new requirements, just makes the code more
consistent.

Discussion: https://www.postgresql.org/message-id/flat/dac5d2d0-98f5-94d9-8e69-46da2413593d%40enterprisedb.com
This commit is contained in:
Peter Eisentraut 2022-06-16 21:50:56 +02:00
parent 098c703d30
commit 02c408e21a
38 changed files with 213 additions and 435 deletions

View File

@ -809,8 +809,7 @@ error:
(errcode_for_file_access(),
errmsg("could not write file \"%s\": %m",
PGSS_DUMP_FILE ".tmp")));
if (qbuffer)
free(qbuffer);
free(qbuffer);
if (file)
FreeFile(file);
unlink(PGSS_DUMP_FILE ".tmp");
@ -1657,8 +1656,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo,
pgss->extent != extent ||
pgss->gc_count != gc_count)
{
if (qbuffer)
free(qbuffer);
free(qbuffer);
qbuffer = qtext_load_file(&qbuffer_size);
}
}
@ -1842,8 +1840,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo,
LWLockRelease(pgss->lock);
if (qbuffer)
free(qbuffer);
free(qbuffer);
}
/* Number of output arguments (columns) for pg_stat_statements_info */
@ -2446,8 +2443,7 @@ gc_fail:
/* clean up resources */
if (qfile)
FreeFile(qfile);
if (qbuffer)
free(qbuffer);
free(qbuffer);
/*
* Since the contents of the external file are now uncertain, mark all

View File

@ -292,8 +292,7 @@ uuid_generate_internal(int v, unsigned char *ns, const char *ptr, int len)
if (ptr && len <= 36)
strcpy(strbuf + (36 - len), ptr);
}
if (str)
free(str);
free(str);
}
if (status != uuid_s_ok)
@ -366,8 +365,7 @@ uuid_generate_internal(int v, unsigned char *ns, const char *ptr, int len)
if (status == uuid_s_ok)
strlcpy(strbuf, str, 37);
if (str)
free(str);
free(str);
if (status != uuid_s_ok)
ereport(ERROR,

View File

@ -288,8 +288,7 @@ BootstrapModeMain(int argc, char *argv[], bool check_only)
SetConfigOption(name, value, PGC_POSTMASTER, PGC_S_ARGV);
free(name);
if (value)
free(value);
free(value);
break;
}
default:

View File

@ -2020,10 +2020,7 @@ pam_passwd_conv_proc(int num_msg, const struct pam_message **msg,
fail:
/* free up whatever we allocated */
for (i = 0; i < num_msg; i++)
{
if (reply[i].resp != NULL)
free(reply[i].resp);
}
free(reply[i].resp);
free(reply);
return PAM_CONV_ERR;

View File

@ -854,8 +854,7 @@ PostmasterMain(int argc, char *argv[])
SetConfigOption(name, value, PGC_POSTMASTER, PGC_S_ARGV);
free(name);
if (value)
free(value);
free(value);
break;
}

View File

@ -930,10 +930,8 @@ pg_ctype_get_cache(pg_wc_probefunc probefunc, int cclasscode)
* Failure, clean up
*/
out_of_memory:
if (pcc->cv.chrs)
free(pcc->cv.chrs);
if (pcc->cv.ranges)
free(pcc->cv.ranges);
free(pcc->cv.chrs);
free(pcc->cv.ranges);
free(pcc);
return NULL;

View File

@ -3896,8 +3896,7 @@ process_postgres_switches(int argc, char *argv[], GucContext ctx,
}
SetConfigOption(name, value, ctx, gucsource);
free(name);
if (value)
free(value);
free(value);
break;
}

View File

@ -374,26 +374,16 @@ assign_locale_messages(const char *newval, void *extra)
static void
free_struct_lconv(struct lconv *s)
{
if (s->decimal_point)
free(s->decimal_point);
if (s->thousands_sep)
free(s->thousands_sep);
if (s->grouping)
free(s->grouping);
if (s->int_curr_symbol)
free(s->int_curr_symbol);
if (s->currency_symbol)
free(s->currency_symbol);
if (s->mon_decimal_point)
free(s->mon_decimal_point);
if (s->mon_thousands_sep)
free(s->mon_thousands_sep);
if (s->mon_grouping)
free(s->mon_grouping);
if (s->positive_sign)
free(s->positive_sign);
if (s->negative_sign)
free(s->negative_sign);
free(s->decimal_point);
free(s->thousands_sep);
free(s->grouping);
free(s->int_curr_symbol);
free(s->currency_symbol);
free(s->mon_decimal_point);
free(s->mon_thousands_sep);
free(s->mon_grouping);
free(s->positive_sign);
free(s->negative_sign);
}
/*

View File

@ -1985,8 +1985,7 @@ set_syslog_parameters(const char *ident, int facility)
closelog();
openlog_done = false;
}
if (syslog_ident)
free(syslog_ident);
free(syslog_ident);
syslog_ident = strdup(ident);
/* if the strdup fails, we will cope in write_syslog() */
syslog_facility = facility;

View File

@ -417,8 +417,7 @@ SetDataDir(const char *dir)
/* If presented path is relative, convert to absolute */
new = make_absolute_path(dir);
if (DataDir)
free(DataDir);
free(DataDir);
DataDir = new;
}

View File

@ -5483,8 +5483,7 @@ build_guc_variables(void)
for (i = 0; ConfigureNamesEnum[i].gen.name; i++)
guc_vars[num_vars++] = &ConfigureNamesEnum[i].gen;
if (guc_variables)
free(guc_variables);
free(guc_variables);
guc_variables = guc_vars;
num_guc_variables = num_vars;
size_guc_variables = size_vars;
@ -6880,8 +6879,7 @@ ReportGUCOption(struct config_generic *record)
* set last_reported to NULL and thereby possibly make a duplicate
* report later.
*/
if (record->last_reported)
free(record->last_reported);
free(record->last_reported);
record->last_reported = strdup(val);
}
@ -8356,8 +8354,7 @@ set_config_sourcefile(const char *name, char *sourcefile, int sourceline)
return;
sourcefile = guc_strdup(elevel, sourcefile);
if (record->sourcefile)
free(record->sourcefile);
free(record->sourcefile);
record->sourcefile = sourcefile;
record->sourceline = sourceline;
}
@ -8877,8 +8874,7 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt)
if (record->vartype == PGC_STRING && newval.stringval != NULL)
free(newval.stringval);
if (newextra)
free(newextra);
free(newextra);
/*
* We must also reject values containing newlines, because the
@ -11225,12 +11221,9 @@ RestoreGUCState(void *gucstate)
* pointers.
*/
Assert(gconf->stack == NULL);
if (gconf->extra)
free(gconf->extra);
if (gconf->last_reported) /* probably can't happen */
free(gconf->last_reported);
if (gconf->sourcefile)
free(gconf->sourcefile);
free(gconf->extra);
free(gconf->last_reported);
free(gconf->sourcefile);
switch (gconf->vartype)
{
case PGC_BOOL:
@ -11261,8 +11254,7 @@ RestoreGUCState(void *gucstate)
{
struct config_string *conf = (struct config_string *) gconf;
if (*conf->variable)
free(*conf->variable);
free(*conf->variable);
if (conf->reset_val && conf->reset_val != *conf->variable)
free(conf->reset_val);
if (conf->reset_extra && conf->reset_extra != gconf->extra)

View File

@ -775,8 +775,7 @@ progress_update_filename(const char *filename)
/* We needn't maintain this variable if not doing verbose reports. */
if (showprogress && verbose)
{
if (progress_filename)
free(progress_filename);
free(progress_filename);
if (filename)
progress_filename = pg_strdup(filename);
else

View File

@ -154,8 +154,7 @@ GetConnection(void)
/* Get a new password if appropriate */
if (need_password)
{
if (password)
free(password);
free(password);
password = simple_prompt("Password: ", false);
need_password = false;
}

View File

@ -98,18 +98,15 @@ buildACLCommands(const char *name, const char *subname, const char *nspname,
/* Parse the acls array */
if (!parsePGArray(acls, &aclitems, &naclitems))
{
if (aclitems)
free(aclitems);
free(aclitems);
return false;
}
/* Parse the baseacls too */
if (!parsePGArray(baseacls, &baseitems, &nbaseitems))
{
if (aclitems)
free(aclitems);
if (baseitems)
free(baseitems);
free(aclitems);
free(baseitems);
return false;
}
@ -298,14 +295,10 @@ buildACLCommands(const char *name, const char *subname, const char *nspname,
destroyPQExpBuffer(firstsql);
destroyPQExpBuffer(secondsql);
if (aclitems)
free(aclitems);
if (baseitems)
free(baseitems);
if (grantitems)
free(grantitems);
if (revokeitems)
free(revokeitems);
free(aclitems);
free(baseitems);
free(grantitems);
free(revokeitems);
return ok;
}

View File

@ -640,8 +640,7 @@ RestoreArchive(Archive *AHX)
* If we treated users as pg_dump'able objects then we'd need to reset
* currUser here too.
*/
if (AH->currSchema)
free(AH->currSchema);
free(AH->currSchema);
AH->currSchema = NULL;
}
@ -2067,8 +2066,7 @@ _discoverArchiveFormat(ArchiveHandle *AH)
pg_log_debug("attempting to ascertain archive format");
if (AH->lookahead)
free(AH->lookahead);
free(AH->lookahead);
AH->readHeader = 0;
AH->lookaheadSize = 512;
@ -3178,21 +3176,17 @@ _reconnectToDB(ArchiveHandle *AH, const char *dbname)
* NOTE: currUser keeps track of what the imaginary session user in our
* script is. It's now effectively reset to the original userID.
*/
if (AH->currUser)
free(AH->currUser);
free(AH->currUser);
AH->currUser = NULL;
/* don't assume we still know the output schema, tablespace, etc either */
if (AH->currSchema)
free(AH->currSchema);
free(AH->currSchema);
AH->currSchema = NULL;
if (AH->currTableAm)
free(AH->currTableAm);
free(AH->currTableAm);
AH->currTableAm = NULL;
if (AH->currTablespace)
free(AH->currTablespace);
free(AH->currTablespace);
AH->currTablespace = NULL;
/* re-establish fixed state */
@ -3219,8 +3213,7 @@ _becomeUser(ArchiveHandle *AH, const char *user)
* NOTE: currUser keeps track of what the imaginary session user in our
* script is
*/
if (AH->currUser)
free(AH->currUser);
free(AH->currUser);
AH->currUser = pg_strdup(user);
}
@ -3285,8 +3278,7 @@ _selectOutputSchema(ArchiveHandle *AH, const char *schemaName)
else
ahprintf(AH, "%s;\n\n", qry->data);
if (AH->currSchema)
free(AH->currSchema);
free(AH->currSchema);
AH->currSchema = pg_strdup(schemaName);
destroyPQExpBuffer(qry);
@ -3347,8 +3339,7 @@ _selectTablespace(ArchiveHandle *AH, const char *tablespace)
else
ahprintf(AH, "%s;\n\n", qry->data);
if (AH->currTablespace)
free(AH->currTablespace);
free(AH->currTablespace);
AH->currTablespace = pg_strdup(want);
destroyPQExpBuffer(qry);
@ -3399,8 +3390,7 @@ _selectTableAccessMethod(ArchiveHandle *AH, const char *tableam)
destroyPQExpBuffer(cmd);
if (AH->currTableAm)
free(AH->currTableAm);
free(AH->currTableAm);
AH->currTableAm = pg_strdup(want);
}
@ -3659,8 +3649,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData)
*/
if (_tocEntryIsACL(te))
{
if (AH->currUser)
free(AH->currUser);
free(AH->currUser);
AH->currUser = NULL;
}
}
@ -3991,17 +3980,13 @@ restore_toc_entries_prefork(ArchiveHandle *AH, TocEntry *pending_list)
DisconnectDatabase(&AH->public);
/* blow away any transient state from the old connection */
if (AH->currUser)
free(AH->currUser);
free(AH->currUser);
AH->currUser = NULL;
if (AH->currSchema)
free(AH->currSchema);
free(AH->currSchema);
AH->currSchema = NULL;
if (AH->currTablespace)
free(AH->currTablespace);
free(AH->currTablespace);
AH->currTablespace = NULL;
if (AH->currTableAm)
free(AH->currTableAm);
free(AH->currTableAm);
AH->currTableAm = NULL;
}
@ -4842,16 +4827,11 @@ DeCloneArchive(ArchiveHandle *AH)
destroyPQExpBuffer(AH->sqlparse.curCmd);
/* Clear any connection-local state */
if (AH->currUser)
free(AH->currUser);
if (AH->currSchema)
free(AH->currSchema);
if (AH->currTablespace)
free(AH->currTablespace);
if (AH->currTableAm)
free(AH->currTableAm);
if (AH->savedPassword)
free(AH->savedPassword);
free(AH->currUser);
free(AH->currSchema);
free(AH->currTablespace);
free(AH->currTableAm);
free(AH->savedPassword);
free(AH);
}

View File

@ -632,8 +632,7 @@ _skipData(ArchiveHandle *AH)
{
if (blkLen > buflen)
{
if (buf)
free(buf);
free(buf);
buf = (char *) pg_malloc(blkLen);
buflen = blkLen;
}
@ -649,8 +648,7 @@ _skipData(ArchiveHandle *AH)
blkLen = ReadInt(AH);
}
if (buf)
free(buf);
free(buf);
}
/*

View File

@ -204,8 +204,7 @@ ConnectDatabase(Archive *AHX,
*/
if (PQconnectionUsedPassword(AH->connection))
{
if (AH->savedPassword)
free(AH->savedPassword);
free(AH->savedPassword);
AH->savedPassword = pg_strdup(PQpass(AH->connection));
}

View File

@ -412,8 +412,7 @@ tarClose(ArchiveHandle *AH, TAR_MEMBER *th)
* handle, and we don't use temp files.
*/
if (th->targetFile)
free(th->targetFile);
free(th->targetFile);
th->nFH = NULL;
}

View File

@ -3339,8 +3339,7 @@ dumpSearchPath(Archive *AH)
/* Also save it in AH->searchpath, in case we're doing plain text dump */
AH->searchpath = pg_strdup(qry->data);
if (schemanames)
free(schemanames);
free(schemanames);
PQclear(res);
destroyPQExpBuffer(qry);
destroyPQExpBuffer(path);
@ -4614,8 +4613,7 @@ dumpSubscription(Archive *fout, const SubscriptionInfo *subinfo)
subinfo->dobj.catId, 0, subinfo->dobj.dumpId);
destroyPQExpBuffer(publications);
if (pubnames)
free(pubnames);
free(pubnames);
destroyPQExpBuffer(delq);
destroyPQExpBuffer(query);
@ -11908,12 +11906,10 @@ dumpFunc(Archive *fout, const FuncInfo *finfo)
destroyPQExpBuffer(delqry);
destroyPQExpBuffer(asPart);
free(funcsig);
if (funcfullsig)
free(funcfullsig);
free(funcfullsig);
free(funcsig_tag);
free(qual_funcsig);
if (configitems)
free(configitems);
free(configitems);
}
@ -13658,8 +13654,7 @@ dumpAgg(Archive *fout, const AggInfo *agginfo)
agginfo->aggfn.rolname, &agginfo->aggfn.dacl);
free(aggsig);
if (aggfullsig)
free(aggfullsig);
free(aggfullsig);
free(aggsig_tag);
PQclear(res);
@ -15713,12 +15708,9 @@ dumpTableSchema(Archive *fout, const TableInfo *tbinfo)
tbinfo->attfdwoptions[j]);
} /* end loop over columns */
if (partkeydef)
free(partkeydef);
if (ftoptions)
free(ftoptions);
if (srvname)
free(srvname);
free(partkeydef);
free(ftoptions);
free(srvname);
}
/*
@ -16105,10 +16097,8 @@ dumpIndex(Archive *fout, const IndxInfo *indxinfo)
.createStmt = q->data,
.dropStmt = delq->data));
if (indstatcolsarray)
free(indstatcolsarray);
if (indstatvalsarray)
free(indstatvalsarray);
free(indstatcolsarray);
free(indstatvalsarray);
}
/* Dump Index Comments */

View File

@ -1500,10 +1500,8 @@ connectDatabase(const char *dbname, const char *connection_string,
char *err_msg = NULL;
int i = 0;
if (keywords)
free(keywords);
if (values)
free(values);
free(keywords);
free(values);
if (conn_opts)
PQconninfoFree(conn_opts);

View File

@ -1852,8 +1852,7 @@ putVariable(Variables *variables, const char *context, char *name,
/* dup then free, in case value is pointing at this variable */
val = pg_strdup(value);
if (var->svalue)
free(var->svalue);
free(var->svalue);
var->svalue = val;
var->value.type = PGBT_NO_VALUE;
@ -1872,8 +1871,7 @@ putVariableValue(Variables *variables, const char *context, char *name,
if (!var)
return false;
if (var->svalue)
free(var->svalue);
free(var->svalue);
var->svalue = NULL;
var->value = *value;

View File

@ -595,8 +595,7 @@ exec_command_cd(PsqlScanState scan_state, bool active_branch, const char *cmd)
success = false;
}
if (opt)
free(opt);
free(opt);
}
else
ignore_slash_options(scan_state);
@ -769,8 +768,7 @@ exec_command_d(PsqlScanState scan_state, bool active_branch, const char *cmd)
break;
}
if (pattern2)
free(pattern2);
free(pattern2);
}
break;
case 'a':
@ -881,8 +879,7 @@ exec_command_d(PsqlScanState scan_state, bool active_branch, const char *cmd)
OT_NORMAL, NULL, true);
success = listDbRoleSettings(pattern, pattern2);
if (pattern2)
free(pattern2);
free(pattern2);
}
else
status = PSQL_CMD_UNKNOWN;
@ -963,8 +960,7 @@ exec_command_d(PsqlScanState scan_state, bool active_branch, const char *cmd)
status = PSQL_CMD_UNKNOWN;
}
if (pattern)
free(pattern);
free(pattern);
}
else
ignore_slash_options(scan_state);
@ -1092,10 +1088,8 @@ exec_command_edit(PsqlScanState scan_state, bool active_branch,
else
status = PSQL_CMD_ERROR;
}
if (fname)
free(fname);
if (ln)
free(ln);
free(fname);
free(ln);
}
}
else
@ -1204,8 +1198,7 @@ exec_command_ef_ev(PsqlScanState scan_state, bool active_branch,
status = PSQL_CMD_NEWEDIT;
}
if (obj_desc)
free(obj_desc);
free(obj_desc);
}
else
ignore_slash_whole_line(scan_state);
@ -1920,8 +1913,7 @@ exec_command_list(PsqlScanState scan_state, bool active_branch, const char *cmd)
success = listAllDbs(pattern, show_verbose);
if (pattern)
free(pattern);
free(pattern);
}
else
ignore_slash_options(scan_state);
@ -2136,10 +2128,8 @@ exec_command_password(PsqlScanState scan_state, bool active_branch)
}
free(user);
if (pw1)
free(pw1);
if (pw2)
free(pw2);
free(pw1);
free(pw2);
termPQExpBuffer(&buf);
}
else
@ -2214,10 +2204,8 @@ exec_command_prompt(PsqlScanState scan_state, bool active_branch,
(result && !SetVariable(pset.vars, opt, result)))
success = false;
if (result)
free(result);
if (prompt_text)
free(prompt_text);
free(result);
free(prompt_text);
free(opt);
}
}
@ -2522,8 +2510,7 @@ exec_command_sf_sv(PsqlScanState scan_state, bool active_branch,
ClosePager(output);
}
if (obj_desc)
free(obj_desc);
free(obj_desc);
destroyPQExpBuffer(buf);
}
else
@ -2802,8 +2789,7 @@ exec_command_z(PsqlScanState scan_state, bool active_branch)
OT_NORMAL, NULL, true);
success = permissionsList(pattern);
if (pattern)
free(pattern);
free(pattern);
}
else
ignore_slash_options(scan_state);
@ -2853,8 +2839,7 @@ exec_command_slash_command_help(PsqlScanState scan_state, bool active_branch)
else
slashUsage(pset.popt.topt.pager);
if (opt0)
free(opt0);
free(opt0);
}
else
ignore_slash_options(scan_state);
@ -2994,8 +2979,7 @@ ignore_slash_filepipe(PsqlScanState scan_state)
char *arg = psql_scan_slash_option(scan_state,
OT_FILEPIPE, NULL, false);
if (arg)
free(arg);
free(arg);
}
/*
@ -3011,8 +2995,7 @@ ignore_slash_whole_line(PsqlScanState scan_state)
char *arg = psql_scan_slash_option(scan_state,
OT_WHOLE_LINE, NULL, false);
if (arg)
free(arg);
free(arg);
}
/*
@ -4779,16 +4762,11 @@ restorePsetInfo(printQueryOpt *popt, printQueryOpt *save)
/* Free all the old data we're about to overwrite the pointers to. */
/* topt.line_style points to const data that need not be duplicated */
if (popt->topt.fieldSep.separator)
free(popt->topt.fieldSep.separator);
if (popt->topt.recordSep.separator)
free(popt->topt.recordSep.separator);
if (popt->topt.tableAttr)
free(popt->topt.tableAttr);
if (popt->nullPrint)
free(popt->nullPrint);
if (popt->title)
free(popt->title);
free(popt->topt.fieldSep.separator);
free(popt->topt.recordSep.separator);
free(popt->topt.tableAttr);
free(popt->nullPrint);
free(popt->title);
/*
* footers and translate_columns are never set in psql's print settings,

View File

@ -389,8 +389,7 @@ do_copy(const char *args)
pg_log_error("%s: %s", options->file,
reason ? reason : "");
if (reason)
free(reason);
free(reason);
}
success = false;
}

View File

@ -1786,8 +1786,7 @@ describeOneTableDetails(const char *schemaname,
printQuery(res, &myopt, pset.queryFout, false, pset.logfile);
if (footers[0])
free(footers[0]);
free(footers[0]);
retval = true;
goto error_return; /* not an error, just return early */
@ -3491,8 +3490,7 @@ error_return:
termPQExpBuffer(&title);
termPQExpBuffer(&tmpbuf);
if (view_def)
free(view_def);
free(view_def);
if (res)
PQclear(res);

View File

@ -158,8 +158,7 @@ pg_send_history(PQExpBuffer history_buf)
else
{
/* Save each previous line for ignoredups processing */
if (prev_hist)
free(prev_hist);
free(prev_hist);
prev_hist = pg_strdup(s);
/* And send it to readline */
add_history(s);

View File

@ -4754,11 +4754,9 @@ psql_completion(const char *text, int start, int end)
free(previous_words);
free(words_buffer);
free(text_copy);
if (completion_ref_object)
free(completion_ref_object);
free(completion_ref_object);
completion_ref_object = NULL;
if (completion_ref_schema)
free(completion_ref_schema);
free(completion_ref_schema);
completion_ref_schema = NULL;
/* Return our Grand List O' Matches */
@ -5160,12 +5158,9 @@ _complete_from_query(const char *simple_query,
/* Clean up */
termPQExpBuffer(&query_buffer);
free(e_object_like);
if (e_schemaname)
free(e_schemaname);
if (e_ref_object)
free(e_ref_object);
if (e_ref_schema)
free(e_ref_schema);
free(e_schemaname);
free(e_ref_object);
free(e_ref_schema);
}
/* Return the next result, if any, but not if the query failed */

View File

@ -104,8 +104,7 @@ pg_strdup(const char *in)
void
pg_free(void *ptr)
{
if (ptr != NULL)
free(ptr);
free(ptr);
}
/*

View File

@ -99,8 +99,7 @@ connectDatabase(const ConnParams *cparams, const char *progname,
cparams->prompt_password != TRI_NO)
{
PQfinish(conn);
if (password)
free(password);
free(password);
password = simple_prompt("Password: ", false);
new_pass = true;
}

View File

@ -810,8 +810,7 @@ appendReloptionsArray(PQExpBuffer buffer, const char *reloptions,
if (!parsePGArray(reloptions, &options, &noptions))
{
if (options)
free(options);
free(options);
return false;
}
@ -854,8 +853,7 @@ appendReloptionsArray(PQExpBuffer buffer, const char *reloptions,
appendStringLiteral(buffer, value, encoding, std_strings);
}
if (options)
free(options);
free(options);
return true;
}

View File

@ -16,11 +16,7 @@
#define init_var(v) memset(v,0,sizeof(numeric))
#define digitbuf_alloc(size) ((NumericDigit *) pgtypes_alloc(size))
#define digitbuf_free(buf) \
do { \
if ((buf) != NULL) \
free(buf); \
} while (0)
#define digitbuf_free(buf) free(buf)
/* ----------

View File

@ -113,8 +113,7 @@ drop_descriptor(char *name, char *connection)
&& strcmp(connection, i->connection) == 0))
{
*lastptr = i->next;
if (i->connection)
free(i->connection);
free(i->connection);
free(i->name);
free(i);
return;

View File

@ -174,30 +174,21 @@ scram_free(void *opaq)
{
fe_scram_state *state = (fe_scram_state *) opaq;
if (state->password)
free(state->password);
if (state->sasl_mechanism)
free(state->sasl_mechanism);
free(state->password);
free(state->sasl_mechanism);
/* client messages */
if (state->client_nonce)
free(state->client_nonce);
if (state->client_first_message_bare)
free(state->client_first_message_bare);
if (state->client_final_message_without_proof)
free(state->client_final_message_without_proof);
free(state->client_nonce);
free(state->client_first_message_bare);
free(state->client_final_message_without_proof);
/* first message from server */
if (state->server_first_message)
free(state->server_first_message);
if (state->salt)
free(state->salt);
if (state->nonce)
free(state->nonce);
free(state->server_first_message);
free(state->salt);
free(state->nonce);
/* final message from server */
if (state->server_final_message)
free(state->server_final_message);
free(state->server_final_message);
free(state);
}
@ -941,8 +932,7 @@ pg_fe_scram_build_secret(const char *password, const char **errstr)
if (!pg_strong_random(saltbuf, SCRAM_DEFAULT_SALT_LEN))
{
*errstr = _("failed to generate random salt");
if (prep_password)
free(prep_password);
free(prep_password);
return NULL;
}
@ -950,8 +940,7 @@ pg_fe_scram_build_secret(const char *password, const char **errstr)
SCRAM_DEFAULT_ITERATIONS, password,
errstr);
if (prep_password)
free(prep_password);
free(prep_password);
return result;
}

View File

@ -107,8 +107,7 @@ pg_GSS_continue(PGconn *conn, int payloadlen)
NULL,
NULL);
if (ginbuf.value)
free(ginbuf.value);
free(ginbuf.value);
if (goutbuf.length != 0)
{
@ -270,8 +269,7 @@ pg_SSPI_continue(PGconn *conn, int payloadlen)
NULL);
/* we don't need the input anymore */
if (inputbuf)
free(inputbuf);
free(inputbuf);
if (r != SEC_E_OK && r != SEC_I_CONTINUE_NEEDED)
{
@ -604,21 +602,18 @@ pg_SASL_init(PGconn *conn, int payloadlen)
goto error;
termPQExpBuffer(&mechanism_buf);
if (initialresponse)
free(initialresponse);
free(initialresponse);
return STATUS_OK;
error:
termPQExpBuffer(&mechanism_buf);
if (initialresponse)
free(initialresponse);
free(initialresponse);
return STATUS_ERROR;
oom_error:
termPQExpBuffer(&mechanism_buf);
if (initialresponse)
free(initialresponse);
free(initialresponse);
appendPQExpBufferStr(&conn->errorMessage,
libpq_gettext("out of memory\n"));
return STATUS_ERROR;
@ -831,8 +826,7 @@ pg_password_sendauth(PGconn *conn, const char *password, AuthRequest areq)
return STATUS_ERROR;
}
ret = pqPacketSend(conn, 'p', pwd_to_send, strlen(pwd_to_send) + 1);
if (crypt_pwd)
free(crypt_pwd);
free(crypt_pwd);
return ret;
}

View File

@ -540,8 +540,7 @@ pqFreeCommandQueue(PGcmdQueueEntry *queue)
PGcmdQueueEntry *cur = queue;
queue = cur->next;
if (cur->query)
free(cur->query);
free(cur->query);
free(cur);
}
}
@ -593,8 +592,7 @@ pqDropServerData(PGconn *conn)
conn->sversion = 0;
/* Drop large-object lookup data */
if (conn->lobjfuncs)
free(conn->lobjfuncs);
free(conn->lobjfuncs);
conn->lobjfuncs = NULL;
/* Reset assorted other per-connection state */
@ -602,8 +600,7 @@ pqDropServerData(PGconn *conn)
conn->auth_req_received = false;
conn->password_needed = false;
conn->write_failed = false;
if (conn->write_err_msg)
free(conn->write_err_msg);
free(conn->write_err_msg);
conn->write_err_msg = NULL;
conn->be_pid = 0;
conn->be_key = 0;
@ -898,8 +895,7 @@ fillPGconn(PGconn *conn, PQconninfoOption *connOptions)
{
char **connmember = (char **) ((char *) conn + option->connofs);
if (*connmember)
free(*connmember);
free(*connmember);
*connmember = strdup(tmp);
if (*connmember == NULL)
{
@ -1113,8 +1109,7 @@ connectOptions2(PGconn *conn)
}
else
{
if (ch->host)
free(ch->host);
free(ch->host);
/*
* This bit selects the default host location. If you change
@ -1186,8 +1181,7 @@ connectOptions2(PGconn *conn)
*/
if (conn->pguser == NULL || conn->pguser[0] == '\0')
{
if (conn->pguser)
free(conn->pguser);
free(conn->pguser);
conn->pguser = pg_fe_getauthname(&conn->errorMessage);
if (!conn->pguser)
{
@ -1201,8 +1195,7 @@ connectOptions2(PGconn *conn)
*/
if (conn->dbName == NULL || conn->dbName[0] == '\0')
{
if (conn->dbName)
free(conn->dbName);
free(conn->dbName);
conn->dbName = strdup(conn->pguser);
if (!conn->dbName)
goto oom_error;
@ -1221,8 +1214,7 @@ connectOptions2(PGconn *conn)
if (pqGetHomeDirectory(homedir, sizeof(homedir)))
{
if (conn->pgpassfile)
free(conn->pgpassfile);
free(conn->pgpassfile);
conn->pgpassfile = malloc(MAXPGPATH);
if (!conn->pgpassfile)
goto oom_error;
@ -1548,8 +1540,7 @@ PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions,
/* Insert dbName parameter value into struct */
if (dbName && dbName[0] != '\0')
{
if (conn->dbName)
free(conn->dbName);
free(conn->dbName);
conn->dbName = strdup(dbName);
if (!conn->dbName)
goto oom_error;
@ -1562,8 +1553,7 @@ PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions,
*/
if (pghost && pghost[0] != '\0')
{
if (conn->pghost)
free(conn->pghost);
free(conn->pghost);
conn->pghost = strdup(pghost);
if (!conn->pghost)
goto oom_error;
@ -1571,8 +1561,7 @@ PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions,
if (pgport && pgport[0] != '\0')
{
if (conn->pgport)
free(conn->pgport);
free(conn->pgport);
conn->pgport = strdup(pgport);
if (!conn->pgport)
goto oom_error;
@ -1580,8 +1569,7 @@ PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions,
if (pgoptions && pgoptions[0] != '\0')
{
if (conn->pgoptions)
free(conn->pgoptions);
free(conn->pgoptions);
conn->pgoptions = strdup(pgoptions);
if (!conn->pgoptions)
goto oom_error;
@ -1589,8 +1577,7 @@ PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions,
if (login && login[0] != '\0')
{
if (conn->pguser)
free(conn->pguser);
free(conn->pguser);
conn->pguser = strdup(login);
if (!conn->pguser)
goto oom_error;
@ -1598,8 +1585,7 @@ PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions,
if (pwd && pwd[0] != '\0')
{
if (conn->pgpass)
free(conn->pgpass);
free(conn->pgpass);
conn->pgpass = strdup(pwd);
if (!conn->pgpass)
goto oom_error;
@ -4044,10 +4030,8 @@ makeEmptyPGconn(void)
static void
freePGconn(PGconn *conn)
{
int i;
/* let any event procs clean up their state data */
for (i = 0; i < conn->nEvents; i++)
for (int i = 0; i < conn->nEvents; i++)
{
PGEventConnDestroy evt;
@ -4058,114 +4042,69 @@ freePGconn(PGconn *conn)
}
/* clean up pg_conn_host structures */
if (conn->connhost != NULL)
for (int i = 0; i < conn->nconnhost; ++i)
{
for (i = 0; i < conn->nconnhost; ++i)
free(conn->connhost[i].host);
free(conn->connhost[i].hostaddr);
free(conn->connhost[i].port);
if (conn->connhost[i].password != NULL)
{
if (conn->connhost[i].host != NULL)
free(conn->connhost[i].host);
if (conn->connhost[i].hostaddr != NULL)
free(conn->connhost[i].hostaddr);
if (conn->connhost[i].port != NULL)
free(conn->connhost[i].port);
if (conn->connhost[i].password != NULL)
{
explicit_bzero(conn->connhost[i].password, strlen(conn->connhost[i].password));
free(conn->connhost[i].password);
}
explicit_bzero(conn->connhost[i].password, strlen(conn->connhost[i].password));
free(conn->connhost[i].password);
}
free(conn->connhost);
}
free(conn->connhost);
if (conn->client_encoding_initial)
free(conn->client_encoding_initial);
if (conn->events)
free(conn->events);
if (conn->pghost)
free(conn->pghost);
if (conn->pghostaddr)
free(conn->pghostaddr);
if (conn->pgport)
free(conn->pgport);
if (conn->connect_timeout)
free(conn->connect_timeout);
if (conn->pgtcp_user_timeout)
free(conn->pgtcp_user_timeout);
if (conn->pgoptions)
free(conn->pgoptions);
if (conn->appname)
free(conn->appname);
if (conn->fbappname)
free(conn->fbappname);
if (conn->dbName)
free(conn->dbName);
if (conn->replication)
free(conn->replication);
if (conn->pguser)
free(conn->pguser);
free(conn->client_encoding_initial);
free(conn->events);
free(conn->pghost);
free(conn->pghostaddr);
free(conn->pgport);
free(conn->connect_timeout);
free(conn->pgtcp_user_timeout);
free(conn->pgoptions);
free(conn->appname);
free(conn->fbappname);
free(conn->dbName);
free(conn->replication);
free(conn->pguser);
if (conn->pgpass)
{
explicit_bzero(conn->pgpass, strlen(conn->pgpass));
free(conn->pgpass);
}
if (conn->pgpassfile)
free(conn->pgpassfile);
if (conn->channel_binding)
free(conn->channel_binding);
if (conn->keepalives)
free(conn->keepalives);
if (conn->keepalives_idle)
free(conn->keepalives_idle);
if (conn->keepalives_interval)
free(conn->keepalives_interval);
if (conn->keepalives_count)
free(conn->keepalives_count);
if (conn->sslmode)
free(conn->sslmode);
if (conn->sslcert)
free(conn->sslcert);
if (conn->sslkey)
free(conn->sslkey);
free(conn->pgpassfile);
free(conn->channel_binding);
free(conn->keepalives);
free(conn->keepalives_idle);
free(conn->keepalives_interval);
free(conn->keepalives_count);
free(conn->sslmode);
free(conn->sslcert);
free(conn->sslkey);
if (conn->sslpassword)
{
explicit_bzero(conn->sslpassword, strlen(conn->sslpassword));
free(conn->sslpassword);
}
if (conn->sslrootcert)
free(conn->sslrootcert);
if (conn->sslcrl)
free(conn->sslcrl);
if (conn->sslcrldir)
free(conn->sslcrldir);
if (conn->sslcompression)
free(conn->sslcompression);
if (conn->sslsni)
free(conn->sslsni);
if (conn->requirepeer)
free(conn->requirepeer);
if (conn->ssl_min_protocol_version)
free(conn->ssl_min_protocol_version);
if (conn->ssl_max_protocol_version)
free(conn->ssl_max_protocol_version);
if (conn->gssencmode)
free(conn->gssencmode);
if (conn->krbsrvname)
free(conn->krbsrvname);
if (conn->gsslib)
free(conn->gsslib);
if (conn->connip)
free(conn->connip);
free(conn->sslrootcert);
free(conn->sslcrl);
free(conn->sslcrldir);
free(conn->sslcompression);
free(conn->sslsni);
free(conn->requirepeer);
free(conn->ssl_min_protocol_version);
free(conn->ssl_max_protocol_version);
free(conn->gssencmode);
free(conn->krbsrvname);
free(conn->gsslib);
free(conn->connip);
/* Note that conn->Pfdebug is not ours to close or free */
if (conn->write_err_msg)
free(conn->write_err_msg);
if (conn->inBuffer)
free(conn->inBuffer);
if (conn->outBuffer)
free(conn->outBuffer);
if (conn->rowBuf)
free(conn->rowBuf);
if (conn->target_session_attrs)
free(conn->target_session_attrs);
free(conn->write_err_msg);
free(conn->inBuffer);
free(conn->outBuffer);
free(conn->rowBuf);
free(conn->target_session_attrs);
termPQExpBuffer(&conn->errorMessage);
termPQExpBuffer(&conn->workBuffer);
@ -4433,8 +4372,7 @@ fail:
void
PQfreeCancel(PGcancel *cancel)
{
if (cancel)
free(cancel);
free(cancel);
}
@ -5883,8 +5821,7 @@ conninfo_array_parse(const char *const *keywords, const char *const *values,
{
if (strcmp(options[k].keyword, str_option->keyword) == 0)
{
if (options[k].val)
free(options[k].val);
free(options[k].val);
options[k].val = strdup(str_option->val);
if (!options[k].val)
{
@ -5912,8 +5849,7 @@ conninfo_array_parse(const char *const *keywords, const char *const *values,
/*
* Store the value, overriding previous settings
*/
if (option->val)
free(option->val);
free(option->val);
option->val = strdup(pvalue);
if (!option->val)
{
@ -6344,8 +6280,7 @@ conninfo_uri_parse_options(PQconninfoOption *options, const char *uri,
cleanup:
termPQExpBuffer(&hostbuf);
termPQExpBuffer(&portbuf);
if (buf)
free(buf);
free(buf);
return retval;
}
@ -6655,8 +6590,7 @@ conninfo_storeval(PQconninfoOption *connOptions,
}
}
if (option->val)
free(option->val);
free(option->val);
option->val = value_copy;
return option;
@ -6735,16 +6669,11 @@ PQconninfo(PGconn *conn)
void
PQconninfoFree(PQconninfoOption *connOptions)
{
PQconninfoOption *option;
if (connOptions == NULL)
return;
for (option = connOptions; option->keyword != NULL; option++)
{
if (option->val != NULL)
free(option->val);
}
for (PQconninfoOption *option = connOptions; option->keyword != NULL; option++)
free(option->val);
free(connOptions);
}

View File

@ -742,8 +742,7 @@ PQclear(PGresult *res)
free(res->events[i].name);
}
if (res->events)
free(res->events);
free(res->events);
/* Free all the subsidiary blocks */
while ((block = res->curBlock) != NULL)
@ -753,8 +752,7 @@ PQclear(PGresult *res)
}
/* Free the top-level tuple pointer array */
if (res->tuples)
free(res->tuples);
free(res->tuples);
/* zero out the pointer fields to catch programming errors */
res->attDescs = NULL;

View File

@ -303,26 +303,19 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
fputs("</table>\n", fout);
exit:
if (fieldMax)
free(fieldMax);
if (fieldNotNum)
free(fieldNotNum);
if (border)
free(border);
free(fieldMax);
free(fieldNotNum);
free(border);
if (fields)
{
/* if calloc succeeded, this shouldn't overflow size_t */
size_t numfields = ((size_t) nTups + 1) * (size_t) nFields;
while (numfields-- > 0)
{
if (fields[numfields])
free(fields[numfields]);
}
free(fields[numfields]);
free(fields);
}
if (fieldNames)
free((void *) fieldNames);
free(fieldNames);
if (usePipe)
{
#ifdef WIN32
@ -679,8 +672,7 @@ PQdisplayTuples(const PGresult *res,
fflush(fp);
if (fLength)
free(fLength);
free(fLength);
}
@ -763,8 +755,7 @@ PQprintTuples(const PGresult *res,
}
}
if (tborder)
free(tborder);
free(tborder);
}

View File

@ -309,8 +309,7 @@ pq_verify_peer_name_matches_certificate(PGconn *conn)
}
/* clean up */
if (first_name)
free(first_name);
free(first_name);
return (rc == 1);
}

View File

@ -270,8 +270,7 @@ freeaddrinfo(struct addrinfo *res)
}
#endif
if (res->ai_addr)
free(res->ai_addr);
free(res->ai_addr);
free(res);
}
}