Skip to content

Commit 629241d

Browse files
authored
Merge pull request #322 from pblottiere/fix_segfault_shortcut
Fix segmentation fault in pcpatch_transform
2 parents 4588b5c + 032acce commit 629241d

File tree

1 file changed

+11
-24
lines changed

1 file changed

+11
-24
lines changed

pgsql/pc_editor.c

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -85,40 +85,27 @@ Datum pcpatch_setpcid(PG_FUNCTION_ARGS)
8585
PG_FUNCTION_INFO_V1(pcpatch_transform);
8686
Datum pcpatch_transform(PG_FUNCTION_ARGS)
8787
{
88+
PCPATCH *patch, *paout;
8889
SERIALIZED_PATCH *serpatch;
8990
SERIALIZED_PATCH *serpa = PG_GETARG_SERPATCH_P(0);
9091
int32 pcid = PG_GETARG_INT32(1);
9192
float8 def = PG_GETARG_FLOAT8(2);
9293
PCSCHEMA *oschema = pc_schema_from_pcid(serpa->pcid, fcinfo);
9394
PCSCHEMA *nschema = pc_schema_from_pcid(pcid, fcinfo);
9495

95-
// fast path to setpcid if no data transformation is required
96-
97-
if (pc_schema_same_interpretations(oschema, nschema))
98-
{
99-
serpatch = pcpatch_set_schema(serpa, oschema, nschema, def);
100-
if (!serpatch)
101-
PG_RETURN_NULL();
102-
PG_RETURN_POINTER(serpatch);
103-
}
104-
else
105-
{
106-
PCPATCH *patch, *paout;
107-
108-
patch = pc_patch_deserialize(serpa, oschema);
109-
if (!patch)
110-
PG_RETURN_NULL();
96+
patch = pc_patch_deserialize(serpa, oschema);
97+
if (!patch)
98+
PG_RETURN_NULL();
11199

112-
paout = pc_patch_transform(patch, nschema, def);
100+
paout = pc_patch_transform(patch, nschema, def);
113101

114-
pc_patch_free(patch);
102+
pc_patch_free(patch);
115103

116-
if (!paout)
117-
PG_RETURN_NULL();
104+
if (!paout)
105+
PG_RETURN_NULL();
118106

119-
serpatch = pc_patch_serialize(paout, NULL);
120-
pc_patch_free(paout);
107+
serpatch = pc_patch_serialize(paout, NULL);
108+
pc_patch_free(paout);
121109

122-
PG_RETURN_POINTER(serpatch);
123-
}
110+
PG_RETURN_POINTER(serpatch);
124111
}

0 commit comments

Comments
 (0)