You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
deps: triar a #2062 (grupo uv-minor-patch, 42 pacotes): sqlalchemy 2.1 decodifica o nome do banco e pylock.toml fora de sincronia #2069
A PR #2062 do Dependabot (grupo uv-minor-patch, 42 pacotes) não é mergeável hoje, por três motivos independentes. Verificado em 2026-10-12 contra a maincd2b56ba, lendo o uv.lock da PR e reproduzindo o caso com as duas versões.
1. sqlalchemy 2.0.54 → 2.1.3 muda o nome do banco que chega ao driver
tests/test_findings_sink.py::test_sqlalchemy_url_encodes_database_so_query_cannot_override_peer falha. O repo monta postgresql://db.example.com:5432/audit%3Fhostaddr%3D10.0.0.9 (quote(database, safe="") em core/findings_sink.py::_sqlalchemy_url). Reproduzido em ambiente isolado:
2.0.54
2.1.3
host
db.example.com
db.example.com
query
{}
{}
database (e translate_connect_args()['database'])
'audit%3Fhostaddr%3D10.0.0.9'
'audit?hostaddr=10.0.0.9' (decodificado)
O que continua valendo nas duas versões: o ?hostaddr=não vira query e o host não muda. O invariante "o campo database não redireciona o peer via query" se mantém.
O que mudou: a 2.1 percent-decodifica o componente do banco e entrega o nome cru (com ?, =) ao driver, onde a 2.0 o entregava ainda codificado.
O que NÃO foi verificado: se algum driver usado aqui (psycopg2/psycopg, pg8000, etc.) trata = ou espaço em dbname como string de conexão (libpq expand_dbname). Isso decide se há risco real ou só mudança de representação. Tratar como hipótese a verificar, não como vulnerabilidade confirmada.
2. pylock.toml fora de sincronia
O Dependabot atualiza uv.lock e requirements.txt, mas não regenera pylock.toml. Falham test_requirements_txt_matches_uv_export, test_pylock_toml_matches_uv_export e o hook dependency-artifacts-sync do lint. O job Regenerate requirements.txt da própria PR também falha.
3. O que mais está nos 42
Sem downgrade e sem pacote removido. 2 pacotes novos (opentelemetry-exporter-http-transport, opentelemetry-exporter-otlp-common, 0.66b0) e 7 opentelemetry-*0.65b0 → 0.66b0 (a main já estava em série beta). Inclui fastapi 0.141.1 → 0.142.2, gitpython 3.1.62 → 3.2.0, snowflake-connector-python 4.7.4 → 4.8.0 (estável).
Opções (decisão do operador)
A. Manter sqlalchemy>=2.0,<2.1 (constraint no pyproject.toml ou ignore do Dependabot para a 2.1) e mergear o resto do grupo depois de regenerar pylock.toml.
B. Aceitar a 2.1: verificar o comportamento com os drivers reais, adaptar o teste ao novo contrato (nome decodificado) somente se o driver não interpretar =/espaço em dbname, e decidir se o quote() do repo continua necessário.
Aceite
Verificação explícita do driver (psycopg2/psycopg/pg8000) sobre dbname com = e espaço, com resultado documentado aqui.
pylock.toml e requirements.txt regenerados e consistentes com o uv.lock.
Nenhum teste de segurança enfraquecido para ficar verde.
Decisão do operador, relatada por Claude via chat (2026-10-12 09:36 -03)
Não é assinatura do operador no GitHub: é o registro, feito por Claude, da mensagem dele no chat. Texto dele: "Aceito atualizado do sqlalchemy".
Leitura: opção B (aceitar sqlalchemy 2.1.x; não segurar <2.1). Condições que continuam valendo, do próprio aceite desta issue:
Verificar com os drivers reais (psycopg2/psycopg/pg8000) o que acontece com dbname contendo = e espaço (audit hostaddr=10.0.0.9), e documentar o resultado.
Se algum driver interpretar dbname como conninfo, a correção é validar/rejeitar esse nome no repo (fail-closed), não relaxar o teste.
Nenhum teste de segurança enfraquecido para ficar verde.
Regenerar pylock.toml e requirements.txt a partir do uv.lock.
Execução: reparo no lugar na branch da #2062 (nunca fechar sem merge), local primeiro; push só com go explícito.
Activity
FabioLeitao commentedon Oct 12, 2026
Decisão do operador, relatada por Claude via chat (2026-10-12 09:36 -03)
Não é assinatura do operador no GitHub: é o registro, feito por Claude, da mensagem dele no chat. Texto dele: "Aceito atualizado do sqlalchemy".
Leitura: opção B (aceitar sqlalchemy 2.1.x; não segurar
<2.1). Condições que continuam valendo, do próprio aceite desta issue:dbnamecontendo=e espaço (audit hostaddr=10.0.0.9), e documentar o resultado.dbnamecomo conninfo, a correção é validar/rejeitar esse nome no repo (fail-closed), não relaxar o teste.pylock.tomlerequirements.txta partir douv.lock.Execução: reparo no lugar na branch da #2062 (nunca fechar sem merge), local primeiro; push só com go explícito.
🤖 Claude (Sonnet 5.5), tom recomendatório.