diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f11190c143..d1d3f730b59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,12 @@ accidentally triggering the load of a previous DB version.** ## Unreleased +**Bugfixes** * #5336 Use NameData and namestrcpy for names +* #5317 Fix some incorrect memory handling + +**Thanks** +* @Medvecrab for discovering an issue with copying NameData when forming heap tuples. ## 2.10.0 (2023-02-21) diff --git a/src/process_utility.c b/src/process_utility.c index 04d81a79f70..38531cc0cd3 100644 --- a/src/process_utility.c +++ b/src/process_utility.c @@ -1505,7 +1505,8 @@ process_relations_in_namespace(GrantStmt *stmt, Name schema_name, Oid namespaceI while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) { - Name relname = &((Form_pg_class) GETSTRUCT(tuple))->relname; + Name relname = palloc(NAMEDATALEN); + namestrcpy(relname, NameStr(((Form_pg_class) GETSTRUCT(tuple))->relname)); /* these are being added for the first time into this list */ process_grant_add_by_name(stmt, false, schema_name, relname); diff --git a/src/ts_catalog/metadata.c b/src/ts_catalog/metadata.c index 7d36c656bda..71ea8d7e203 100644 --- a/src/ts_catalog/metadata.c +++ b/src/ts_catalog/metadata.c @@ -141,7 +141,7 @@ ts_metadata_insert(const char *metadata_key, Datum metadata_value, Oid type, bool isnull = false; Catalog *catalog = ts_catalog_get(); Relation rel; - char key_data[NAMEDATALEN]; + NameData key_data; rel = table_open(catalog_get_table_id(catalog, METADATA), ShareRowExclusiveLock); @@ -157,10 +157,10 @@ ts_metadata_insert(const char *metadata_key, Datum metadata_value, Oid type, /* We have to copy the key here because heap_form_tuple will copy NAMEDATALEN * into the tuple instead of checking length. */ - strlcpy(key_data, metadata_key, NAMEDATALEN); + namestrcpy(&key_data, metadata_key); /* Insert into the catalog table for persistence */ - values[AttrNumberGetAttrOffset(Anum_metadata_key)] = CStringGetDatum(key_data); + values[AttrNumberGetAttrOffset(Anum_metadata_key)] = NameGetDatum(&key_data); values[AttrNumberGetAttrOffset(Anum_metadata_value)] = convert_type_to_text(metadata_value, type); values[AttrNumberGetAttrOffset(Anum_metadata_include_in_telemetry)] =