Skip to content

Commit 8105f73

Browse files
authored
Allow @ character in extension names (#244)
1 parent bd057a3 commit 8105f73

File tree

3 files changed

+73
-3
lines changed

3 files changed

+73
-3
lines changed

src/tleextension.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -486,13 +486,16 @@ check_valid_extension_name(const char *extensionname)
486486
* Check for alphanumeric character in extension name for now. Although
487487
* this does prevent some naming schemes, it's a more straight forward
488488
* prevention for preventing certain injection attacks due to the way the
489-
* way we rely on functions currently. Allow the '_' or '-' character to
490-
* provide a nice separator if desired.
489+
* way we rely on functions currently. Allow the '_', '-', or '@'
490+
* character to provide a nice separator if desired.
491491
*/
492492

493493
while (extensionname[idx] != '\0')
494494
{
495-
if (!isalnum(extensionname[idx]) && extensionname[idx] != '_' && extensionname[idx] != '-')
495+
if (!isalnum(extensionname[idx]) &&
496+
extensionname[idx] != '_' &&
497+
extensionname[idx] != '-' &&
498+
extensionname[idx] != '@')
496499
ereport(ERROR,
497500
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
498501
errmsg("invalid extension name: \"%s\"", extensionname),

test/expected/pg_tle_management.out

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,51 @@ SELECT pgtle.available_extension_versions();
815815
------------------------------
816816
(0 rows)
817817

818+
-- install extension with '@' symbol in name
819+
SELECT pgtle.install_extension
820+
(
821+
'foo@bar',
822+
'1.0',
823+
'Test TLE Functions',
824+
$_pgtle_$
825+
CREATE OR REPLACE FUNCTION at_func()
826+
RETURNS INT AS $$
827+
(
828+
SELECT 42
829+
)$$ LANGUAGE sql;
830+
$_pgtle_$
831+
);
832+
install_extension
833+
-------------------
834+
t
835+
(1 row)
836+
837+
SELECT pgtle.available_extensions();
838+
available_extensions
839+
------------------------------------
840+
(foo@bar,1.0,"Test TLE Functions")
841+
(1 row)
842+
843+
CREATE EXTENSION "foo@bar";
844+
SELECT extname, extversion from pg_extension where extname='foo@bar';
845+
extname | extversion
846+
---------+------------
847+
foo@bar | 1.0
848+
(1 row)
849+
850+
SELECT at_func();
851+
at_func
852+
---------
853+
42
854+
(1 row)
855+
856+
DROP EXTENSION "foo@bar";
857+
SELECT pgtle.uninstall_extension('foo@bar');
858+
uninstall_extension
859+
---------------------
860+
t
861+
(1 row)
862+
818863
-- Skip TransactionStmts
819864
BEGIN;
820865
SELECT pgtle.available_extension_versions();

test/sql/pg_tle_management.sql

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,28 @@ SELECT pgtle.uninstall_extension('test42');
531531

532532
SELECT pgtle.available_extension_versions();
533533

534+
-- install extension with '@' symbol in name
535+
SELECT pgtle.install_extension
536+
(
537+
'foo@bar',
538+
'1.0',
539+
'Test TLE Functions',
540+
$_pgtle_$
541+
CREATE OR REPLACE FUNCTION at_func()
542+
RETURNS INT AS $$
543+
(
544+
SELECT 42
545+
)$$ LANGUAGE sql;
546+
$_pgtle_$
547+
);
548+
549+
SELECT pgtle.available_extensions();
550+
CREATE EXTENSION "foo@bar";
551+
SELECT extname, extversion from pg_extension where extname='foo@bar';
552+
SELECT at_func();
553+
DROP EXTENSION "foo@bar";
554+
SELECT pgtle.uninstall_extension('foo@bar');
555+
534556
-- Skip TransactionStmts
535557
BEGIN;
536558
SELECT pgtle.available_extension_versions();

0 commit comments

Comments
 (0)