Reino: API Abuse

Uma API é um contrato entre quem chama e o que se chama. As formas mais comuns de abuso de API ocorrem quando o responsável pela chamada não respeita sua parte do contrato. Por exemplo, se um programa não chama chdir() após chamar chroot(), ele viola o contrato que especifica como alterar o diretório raiz ativo de forma segura. Outro bom exemplo de abuso de biblioteca é esperar que o elemento chamado retorne informações confiáveis de DNS ao responsável pela chamada. Nesse caso, o responsável pela chamada abusa a API do elemento chamado ao fazer certas suposições sobre seu comportamento (isto é, que o valor de retorno pode ser usado para fins de autenticação). A outra parte também pode violar o contrato entre quem chama e o que se chama. Por exemplo, se um programador definir SecureRandom como subclasse e retornar um valor não aleatório, o contrato será violado.

Poor Style: Explicit Call to finalize()

Abstract
O método finalize() só deve ser chamado pela JVM após o objeto ter sido coletado como lixo.
Explanation
Embora a especificação da linguagem Java permita que o método finalize() de um objeto seja chamado de fora do finalizador, fazer isso é normalmente uma má ideia. Por exemplo, chamar finalize() explicitamente significa que finalize() será chamado mais de uma vez: a primeira vez será a chamada explícita e a última vez será a chamada que é feita depois que o objeto é coletado como lixo.

Exemplo 1: O fragmento de código a seguir chama finalize() explicitamente:


// time to clean up
widget.finalize();
References
[1] MET12-J. Do not use finalizers CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 586
desc.structural.java.poor_style_explicit_call_to_finalize