This is an automated email from the ASF dual-hosted git repository.

beto pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 1b4d8ddf71 chore: blacklist unsafe functions (#19537)
1b4d8ddf71 is described below

commit 1b4d8ddf7103f3fa18683a0f23dff6d532ad7efa
Author: Beto Dealmeida <[email protected]>
AuthorDate: Tue Apr 5 14:55:30 2022 -0700

    chore: blacklist unsafe functions (#19537)
---
 .pre-commit-config.yaml                                             | 6 ++++++
 superset/databases/utils.py                                         | 2 +-
 superset/migrations/versions/620241d1153f_update_time_grain_sqla.py | 4 ++--
 superset/migrations/versions/b8d3a24d9131_new_dataset_models.py     | 4 ++--
 4 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2429a0153f..b43e10c2cb 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -51,3 +51,9 @@ repos:
       - id: prettier
         args: ['--ignore-path=./superset-frontend/.prettierignore']
         files: 'superset-frontend'
+  # blacklist unsafe functions like make_url (see #19526)
+  - repo: https://github.com/skorokithakis/blacklist-pre-commit-hook
+    rev: e2f070289d8eddcaec0b580d3bde29437e7c8221
+    hooks:
+      - id: blacklist
+        args: ["--blacklisted-names=make_url", "--ignore=tests/"]
diff --git a/superset/databases/utils.py b/superset/databases/utils.py
index cf54f6da6a..5d22e5fe5c 100644
--- a/superset/databases/utils.py
+++ b/superset/databases/utils.py
@@ -113,6 +113,6 @@ def make_url_safe(raw_url: str) -> URL:
     :return:
     """
     try:
-        return make_url(raw_url.strip())
+        return make_url(raw_url.strip())  # noqa
     except Exception:
         raise DatabaseInvalidError()  # pylint: disable=raise-missing-from
diff --git 
a/superset/migrations/versions/620241d1153f_update_time_grain_sqla.py 
b/superset/migrations/versions/620241d1153f_update_time_grain_sqla.py
index 560b6106f4..97bea8f9d1 100644
--- a/superset/migrations/versions/620241d1153f_update_time_grain_sqla.py
+++ b/superset/migrations/versions/620241d1153f_update_time_grain_sqla.py
@@ -30,10 +30,10 @@ import json
 
 from alembic import op
 from sqlalchemy import Column, ForeignKey, Integer, Text
-from sqlalchemy.engine.url import make_url
 from sqlalchemy.ext.declarative import declarative_base
 
 from superset import db, db_engine_specs
+from superset.databases.utils import make_url_safe
 from superset.utils.memoized import memoized
 
 Base = declarative_base()
@@ -46,7 +46,7 @@ class Database(Base):
     sqlalchemy_uri = Column(Text)
 
     def grains(self):
-        url = make_url(self.sqlalchemy_uri)
+        url = make_url_safe(self.sqlalchemy_uri)
         backend = url.get_backend_name()
         db_engine_spec = db_engine_specs.engines.get(
             backend, db_engine_specs.BaseEngineSpec
diff --git a/superset/migrations/versions/b8d3a24d9131_new_dataset_models.py 
b/superset/migrations/versions/b8d3a24d9131_new_dataset_models.py
index 75f5293034..533f8a9fdc 100644
--- a/superset/migrations/versions/b8d3a24d9131_new_dataset_models.py
+++ b/superset/migrations/versions/b8d3a24d9131_new_dataset_models.py
@@ -31,7 +31,6 @@ from uuid import uuid4
 import sqlalchemy as sa
 from alembic import op
 from sqlalchemy import and_, inspect, or_
-from sqlalchemy.engine.url import make_url
 from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.orm import backref, relationship, Session
 from sqlalchemy.schema import UniqueConstraint
@@ -39,6 +38,7 @@ from sqlalchemy_utils import UUIDType
 
 from superset import app, db
 from superset.connectors.sqla.models import ADDITIVE_METRIC_TYPES
+from superset.databases.utils import make_url_safe
 from superset.extensions import encrypted_field_factory
 from superset.migrations.shared.utils import extract_table_references
 from superset.models.core import Database as OriginalDatabase
@@ -323,7 +323,7 @@ def after_insert(target: SqlaTable) -> None:  # pylint: 
disable=too-many-locals
     )
     if not database:
         return
-    url = make_url(database.sqlalchemy_uri)
+    url = make_url_safe(database.sqlalchemy_uri)
     dialect_class = url.get_dialect()
     conditional_quote = dialect_class().identifier_preparer.quote
 

Reply via email to