Skip to content

Commit 02c408e

Browse files
committed
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
1 parent 098c703 commit 02c408e

38 files changed

+214
-436
lines changed

contrib/pg_stat_statements/pg_stat_statements.c

+4-8
Original file line numberDiff line numberDiff line change
@@ -809,8 +809,7 @@ pgss_shmem_shutdown(int code, Datum arg)
809809
(errcode_for_file_access(),
810810
errmsg("could not write file \"%s\": %m",
811811
PGSS_DUMP_FILE ".tmp")));
812-
if (qbuffer)
813-
free(qbuffer);
812+
free(qbuffer);
814813
if (file)
815814
FreeFile(file);
816815
unlink(PGSS_DUMP_FILE ".tmp");
@@ -1657,8 +1656,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo,
16571656
pgss->extent != extent ||
16581657
pgss->gc_count != gc_count)
16591658
{
1660-
if (qbuffer)
1661-
free(qbuffer);
1659+
free(qbuffer);
16621660
qbuffer = qtext_load_file(&qbuffer_size);
16631661
}
16641662
}
@@ -1842,8 +1840,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo,
18421840

18431841
LWLockRelease(pgss->lock);
18441842

1845-
if (qbuffer)
1846-
free(qbuffer);
1843+
free(qbuffer);
18471844
}
18481845

18491846
/* Number of output arguments (columns) for pg_stat_statements_info */
@@ -2446,8 +2443,7 @@ gc_qtexts(void)
24462443
/* clean up resources */
24472444
if (qfile)
24482445
FreeFile(qfile);
2449-
if (qbuffer)
2450-
free(qbuffer);
2446+
free(qbuffer);
24512447

24522448
/*
24532449
* Since the contents of the external file are now uncertain, mark all

contrib/uuid-ossp/uuid-ossp.c

+2-4
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,7 @@ uuid_generate_internal(int v, unsigned char *ns, const char *ptr, int len)
292292
if (ptr && len <= 36)
293293
strcpy(strbuf + (36 - len), ptr);
294294
}
295-
if (str)
296-
free(str);
295+
free(str);
297296
}
298297

299298
if (status != uuid_s_ok)
@@ -366,8 +365,7 @@ uuid_generate_internal(int v, unsigned char *ns, const char *ptr, int len)
366365
if (status == uuid_s_ok)
367366
strlcpy(strbuf, str, 37);
368367

369-
if (str)
370-
free(str);
368+
free(str);
371369

372370
if (status != uuid_s_ok)
373371
ereport(ERROR,

src/backend/bootstrap/bootstrap.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -288,8 +288,7 @@ BootstrapModeMain(int argc, char *argv[], bool check_only)
288288

289289
SetConfigOption(name, value, PGC_POSTMASTER, PGC_S_ARGV);
290290
free(name);
291-
if (value)
292-
free(value);
291+
free(value);
293292
break;
294293
}
295294
default:

src/backend/libpq/auth.c

+1-4
Original file line numberDiff line numberDiff line change
@@ -2020,10 +2020,7 @@ pam_passwd_conv_proc(int num_msg, const struct pam_message **msg,
20202020
fail:
20212021
/* free up whatever we allocated */
20222022
for (i = 0; i < num_msg; i++)
2023-
{
2024-
if (reply[i].resp != NULL)
2025-
free(reply[i].resp);
2026-
}
2023+
free(reply[i].resp);
20272024
free(reply);
20282025

20292026
return PAM_CONV_ERR;

src/backend/postmaster/postmaster.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -854,8 +854,7 @@ PostmasterMain(int argc, char *argv[])
854854

855855
SetConfigOption(name, value, PGC_POSTMASTER, PGC_S_ARGV);
856856
free(name);
857-
if (value)
858-
free(value);
857+
free(value);
859858
break;
860859
}
861860

src/backend/regex/regc_pg_locale.c

+2-4
Original file line numberDiff line numberDiff line change
@@ -930,10 +930,8 @@ pg_ctype_get_cache(pg_wc_probefunc probefunc, int cclasscode)
930930
* Failure, clean up
931931
*/
932932
out_of_memory:
933-
if (pcc->cv.chrs)
934-
free(pcc->cv.chrs);
935-
if (pcc->cv.ranges)
936-
free(pcc->cv.ranges);
933+
free(pcc->cv.chrs);
934+
free(pcc->cv.ranges);
937935
free(pcc);
938936

939937
return NULL;

src/backend/tcop/postgres.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -3896,8 +3896,7 @@ process_postgres_switches(int argc, char *argv[], GucContext ctx,
38963896
}
38973897
SetConfigOption(name, value, ctx, gucsource);
38983898
free(name);
3899-
if (value)
3900-
free(value);
3899+
free(value);
39013900
break;
39023901
}
39033902

src/backend/utils/adt/pg_locale.c

+10-20
Original file line numberDiff line numberDiff line change
@@ -374,26 +374,16 @@ assign_locale_messages(const char *newval, void *extra)
374374
static void
375375
free_struct_lconv(struct lconv *s)
376376
{
377-
if (s->decimal_point)
378-
free(s->decimal_point);
379-
if (s->thousands_sep)
380-
free(s->thousands_sep);
381-
if (s->grouping)
382-
free(s->grouping);
383-
if (s->int_curr_symbol)
384-
free(s->int_curr_symbol);
385-
if (s->currency_symbol)
386-
free(s->currency_symbol);
387-
if (s->mon_decimal_point)
388-
free(s->mon_decimal_point);
389-
if (s->mon_thousands_sep)
390-
free(s->mon_thousands_sep);
391-
if (s->mon_grouping)
392-
free(s->mon_grouping);
393-
if (s->positive_sign)
394-
free(s->positive_sign);
395-
if (s->negative_sign)
396-
free(s->negative_sign);
377+
free(s->decimal_point);
378+
free(s->thousands_sep);
379+
free(s->grouping);
380+
free(s->int_curr_symbol);
381+
free(s->currency_symbol);
382+
free(s->mon_decimal_point);
383+
free(s->mon_thousands_sep);
384+
free(s->mon_grouping);
385+
free(s->positive_sign);
386+
free(s->negative_sign);
397387
}
398388

399389
/*

src/backend/utils/error/elog.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -1985,8 +1985,7 @@ set_syslog_parameters(const char *ident, int facility)
19851985
closelog();
19861986
openlog_done = false;
19871987
}
1988-
if (syslog_ident)
1989-
free(syslog_ident);
1988+
free(syslog_ident);
19901989
syslog_ident = strdup(ident);
19911990
/* if the strdup fails, we will cope in write_syslog() */
19921991
syslog_facility = facility;

src/backend/utils/init/miscinit.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -417,8 +417,7 @@ SetDataDir(const char *dir)
417417
/* If presented path is relative, convert to absolute */
418418
new = make_absolute_path(dir);
419419

420-
if (DataDir)
421-
free(DataDir);
420+
free(DataDir);
422421
DataDir = new;
423422
}
424423

src/backend/utils/misc/guc.c

+8-16
Original file line numberDiff line numberDiff line change
@@ -5483,8 +5483,7 @@ build_guc_variables(void)
54835483
for (i = 0; ConfigureNamesEnum[i].gen.name; i++)
54845484
guc_vars[num_vars++] = &ConfigureNamesEnum[i].gen;
54855485

5486-
if (guc_variables)
5487-
free(guc_variables);
5486+
free(guc_variables);
54885487
guc_variables = guc_vars;
54895488
num_guc_variables = num_vars;
54905489
size_guc_variables = size_vars;
@@ -6880,8 +6879,7 @@ ReportGUCOption(struct config_generic *record)
68806879
* set last_reported to NULL and thereby possibly make a duplicate
68816880
* report later.
68826881
*/
6883-
if (record->last_reported)
6884-
free(record->last_reported);
6882+
free(record->last_reported);
68856883
record->last_reported = strdup(val);
68866884
}
68876885

@@ -8356,8 +8354,7 @@ set_config_sourcefile(const char *name, char *sourcefile, int sourceline)
83568354
return;
83578355

83588356
sourcefile = guc_strdup(elevel, sourcefile);
8359-
if (record->sourcefile)
8360-
free(record->sourcefile);
8357+
free(record->sourcefile);
83618358
record->sourcefile = sourcefile;
83628359
record->sourceline = sourceline;
83638360
}
@@ -8877,8 +8874,7 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt)
88778874

88788875
if (record->vartype == PGC_STRING && newval.stringval != NULL)
88798876
free(newval.stringval);
8880-
if (newextra)
8881-
free(newextra);
8877+
free(newextra);
88828878

88838879
/*
88848880
* We must also reject values containing newlines, because the
@@ -11225,12 +11221,9 @@ RestoreGUCState(void *gucstate)
1122511221
* pointers.
1122611222
*/
1122711223
Assert(gconf->stack == NULL);
11228-
if (gconf->extra)
11229-
free(gconf->extra);
11230-
if (gconf->last_reported) /* probably can't happen */
11231-
free(gconf->last_reported);
11232-
if (gconf->sourcefile)
11233-
free(gconf->sourcefile);
11224+
free(gconf->extra);
11225+
free(gconf->last_reported);
11226+
free(gconf->sourcefile);
1123411227
switch (gconf->vartype)
1123511228
{
1123611229
case PGC_BOOL:
@@ -11261,8 +11254,7 @@ RestoreGUCState(void *gucstate)
1126111254
{
1126211255
struct config_string *conf = (struct config_string *) gconf;
1126311256

11264-
if (*conf->variable)
11265-
free(*conf->variable);
11257+
free(*conf->variable);
1126611258
if (conf->reset_val && conf->reset_val != *conf->variable)
1126711259
free(conf->reset_val);
1126811260
if (conf->reset_extra && conf->reset_extra != gconf->extra)

src/bin/pg_basebackup/pg_basebackup.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -775,8 +775,7 @@ progress_update_filename(const char *filename)
775775
/* We needn't maintain this variable if not doing verbose reports. */
776776
if (showprogress && verbose)
777777
{
778-
if (progress_filename)
779-
free(progress_filename);
778+
free(progress_filename);
780779
if (filename)
781780
progress_filename = pg_strdup(filename);
782781
else

src/bin/pg_basebackup/streamutil.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,7 @@ GetConnection(void)
154154
/* Get a new password if appropriate */
155155
if (need_password)
156156
{
157-
if (password)
158-
free(password);
157+
free(password);
159158
password = simple_prompt("Password: ", false);
160159
need_password = false;
161160
}

src/bin/pg_dump/dumputils.c

+7-14
Original file line numberDiff line numberDiff line change
@@ -98,18 +98,15 @@ buildACLCommands(const char *name, const char *subname, const char *nspname,
9898
/* Parse the acls array */
9999
if (!parsePGArray(acls, &aclitems, &naclitems))
100100
{
101-
if (aclitems)
102-
free(aclitems);
101+
free(aclitems);
103102
return false;
104103
}
105104

106105
/* Parse the baseacls too */
107106
if (!parsePGArray(baseacls, &baseitems, &nbaseitems))
108107
{
109-
if (aclitems)
110-
free(aclitems);
111-
if (baseitems)
112-
free(baseitems);
108+
free(aclitems);
109+
free(baseitems);
113110
return false;
114111
}
115112

@@ -298,14 +295,10 @@ buildACLCommands(const char *name, const char *subname, const char *nspname,
298295
destroyPQExpBuffer(firstsql);
299296
destroyPQExpBuffer(secondsql);
300297

301-
if (aclitems)
302-
free(aclitems);
303-
if (baseitems)
304-
free(baseitems);
305-
if (grantitems)
306-
free(grantitems);
307-
if (revokeitems)
308-
free(revokeitems);
298+
free(aclitems);
299+
free(baseitems);
300+
free(grantitems);
301+
free(revokeitems);
309302

310303
return ok;
311304
}

0 commit comments

Comments
 (0)