Skip to content

fix: corrige resolução invertida de caminho local de imagem (#1360) - #1361

Merged
Rossi-Luciano merged 1 commit into
scieloorg:masterfrom
Rossi-Luciano:fix/1360-resolve-image-path
Sep 13, 2026
Merged

fix: corrige resolução invertida de caminho local de imagem (#1360)#1361
Rossi-Luciano merged 1 commit into
scieloorg:masterfrom
Rossi-Luciano:fix/1360-resolve-image-path

Conversation

@Rossi-Luciano

Copy link
Copy Markdown
Contributor

O que esse PR faz?

Corrige a issue #1360: _resolve_image_path (packtools/sps/formats/pdf/renderer/docx/figure.py) tinha a condição de resolução de caminho invertida. Só chamava resolve_asset_path (que junta assets_dir com href para caminhos locais relativos) quando href estava vazio, caso em que resolve_asset_path sempre retorna None de qualquer forma. Quando href existia (o caso normal), o código usava href sem alteração, então um caminho local relativo nunca era resolvido contra assets_dir e nunca existia de fato no disco. A figura então nunca era inserida no PDF, caindo silenciosamente para o texto alternativo.

resolve_asset_path já trata todos os casos corretamente por conta própria (URL http(s):// absoluta, caminho absoluto, caminho relativo com assets_dir fornecido, fallback quando o arquivo não existe). O fix faz _resolve_image_path delegar sempre a ela, removendo a ramificação if/else que pulava justamente o caso mais comum.

Onde a revisão poderia começar?

packtools/sps/formats/pdf/renderer/docx/figure.py, função _resolve_image_path.

Como este poderia ser testado manualmente?

  1. Criar um diretório com um arquivo de imagem, ex. fig1.png.
  2. Chamar _resolve_image_path('fig1.png', {'assets_dir': '<esse diretório>'}).
  3. Antes: retorna 'fig1.png' sem alteração; os.path.exists('fig1.png') é False a menos que o diretório de trabalho do processo coincida por acaso com assets_dir.
  4. Depois: retorna o caminho absoluto real do arquivo; os.path.exists(...) é True.
  5. pytest tests/sps/formats/pdf/renderer/docx/test_figure.py -k ResolveImagePath cobre os 4 casos (caminho relativo + assets_dir, href vazio, caminho absoluto, URL remota delegando para download_remote_asset).

Algum cenário de contexto que queira dar?

Achado incidentalmente ao construir a demonstração do PR #1300, nunca teve issue própria até agora. Não afeta os artigos do corpus de teste usados nas demais issues/PRs do gerador de PDF (todos referenciam imagens por URL https:// absoluta), mas afeta o caso de entrada padrão de um pacote SciELO real (XML + imagens num mesmo diretório, referenciadas por caminho relativo). Sem exemplo real disponível no corpus para gerar um PDF antes/depois; a evidência é a reprodução direta da função (passos acima) e os testes de regressão novos.

Independente de #1348, #1350, #1356 e #1358 (arquivo, função e casos totalmente diferentes).

Screenshots

N/A. Bug reproduzido diretamente na função (sem interface visual), ver seção de testes manuais acima.

Quais são os tickets relevantes?

Issue #1360

Referências

N/A


Segurança da informação (NSI.04)

Seção obrigatória. Marque as opções aplicáveis e justifique quando necessário. Referência: NSI.04 - Norma de Desenvolvimento Seguro.

Este PR manipula dados sensíveis ou pessoais (LGPD)?

  • Sim — descreva os controles de proteção aplicados (criptografia, mascaramento, anonimização, etc.):
  • Não

Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?

  • Sim — descreva o que mudou e por quê:
  • Não

Este PR introduz, atualiza ou remove dependências de terceiros?

  • Sim — as novas dependências foram verificadas no SBOM/Trivy sem vulnerabilidades críticas/altas em aberto?
    • Verificado e aprovado
    • Pendente / vulnerabilidade aceita com justificativa:
  • Não

Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?

  • Sim — link do job:
  • Não aplicável a este PR (justifique): correção pontual de resolução de caminho de arquivo local já existente no projeto, sem alteração de infraestrutura, dependências ou pipeline.

Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?

  • Sim — confirme que há sanitização/parametrização (prepared statements, escaping, etc.):
  • Não

Este PR expõe novos endpoints, telas ou serviços?

  • Sim — HTTPS obrigatório está garantido e o acesso segue o princípio de menor privilégio?
  • Não

Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?

  • Não, nenhum segredo foi commitado
  • Sim (bloquear merge e corrigir antes de prosseguir)

_resolve_image_path so chamava resolve_asset_path (que junta assets_dir
com href pra caminho relativo) quando href estava vazio - caso em que
resolve_asset_path sempre retorna None de qualquer forma. Quando href
existia (o caso normal), o codigo usava href sem alteracao, entao um
caminho local relativo nunca era resolvido contra assets_dir e nunca
existia de fato no disco. Resultado: a figura nunca era inserida,
caindo silenciosamente pro texto alternativo.

resolve_asset_path ja trata todos os casos corretamente (URL absoluta,
caminho absoluto, caminho relativo com assets_dir, fallback). Fix:
_resolve_image_path passa a delegar sempre a ela, sem a ramificacao
if/else que pulava o caso mais comum.

Nao afeta os artigos do corpus de teste (todos usam URL https://
absoluta), so pacotes reais com imagens locais referenciadas por
caminho relativo.
@Rossi-Luciano Rossi-Luciano added the PDF generator Funcionalidade de geração de PDF label Sep 11, 2026
@Rossi-Luciano
Rossi-Luciano merged commit 1661645 into scieloorg:master Sep 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

PDF generator Funcionalidade de geração de PDF

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants