Install a data-type-based solution for protecting pg_get_expr().
Since the code underlying pg_get_expr() is not secure against malformed input, and can't practically be made so, we need to prevent miscreants from feeding arbitrary data to it. We can do this securely by declaring pg_get_expr() to take a new datatype "pg_node_tree" and declaring the system catalog columns that hold nodeToString output to be of that type. There is no way at SQL level to create a non-null value of type pg_node_tree. Since the backend-internal operations that fill those catalog columns operate below the SQL level, they are oblivious to the datatype relabeling and don't need any changes.
Showing
- doc/src/sgml/catalogs.sgml 13 additions, 12 deletionsdoc/src/sgml/catalogs.sgml
- doc/src/sgml/func.sgml 3 additions, 3 deletionsdoc/src/sgml/func.sgml
- src/backend/bootstrap/bootstrap.c 5 additions, 2 deletionssrc/backend/bootstrap/bootstrap.c
- src/backend/utils/adt/pseudotypes.c 56 additions, 1 deletionsrc/backend/utils/adt/pseudotypes.c
- src/include/catalog/catversion.h 2 additions, 2 deletionssrc/include/catalog/catversion.h
- src/include/catalog/genbki.h 3 additions, 2 deletionssrc/include/catalog/genbki.h
- src/include/catalog/pg_attrdef.h 5 additions, 5 deletionssrc/include/catalog/pg_attrdef.h
- src/include/catalog/pg_cast.h 4 additions, 1 deletionsrc/include/catalog/pg_cast.h
- src/include/catalog/pg_constraint.h 2 additions, 2 deletionssrc/include/catalog/pg_constraint.h
- src/include/catalog/pg_index.h 3 additions, 3 deletionssrc/include/catalog/pg_index.h
- src/include/catalog/pg_proc.h 14 additions, 5 deletionssrc/include/catalog/pg_proc.h
- src/include/catalog/pg_rewrite.h 3 additions, 3 deletionssrc/include/catalog/pg_rewrite.h
- src/include/catalog/pg_trigger.h 2 additions, 2 deletionssrc/include/catalog/pg_trigger.h
- src/include/catalog/pg_type.h 6 additions, 2 deletionssrc/include/catalog/pg_type.h
- src/include/utils/builtins.h 5 additions, 1 deletionsrc/include/utils/builtins.h
- src/test/regress/expected/opr_sanity.out 13 additions, 10 deletionssrc/test/regress/expected/opr_sanity.out
- src/test/regress/expected/type_sanity.out 5 additions, 4 deletionssrc/test/regress/expected/type_sanity.out
- src/test/regress/sql/opr_sanity.sql 4 additions, 1 deletionsrc/test/regress/sql/opr_sanity.sql
- src/test/regress/sql/type_sanity.sql 1 addition, 1 deletionsrc/test/regress/sql/type_sanity.sql
Loading
Please register or sign in to comment