ColdFusion 9: int e type = erro “numérico” desagradável?

Acabei de experimentar um comportamento que desafia qualquer lógica e poderia levar a sérios problemas e queria saber sefoi um erro ou se o comportamento foi resolvido e quais são as melhores práticas para contornar o problema? Se é um bug, existe um patch?

Aqui estão os dois comportamentos estranhos que, quando juntos, são uma ameaça à integridade de dados de qualquer sistema.

int('1 2') ->41276isValid('numeric', '1 2') ->true

Por quê? Bem vamos ver...

<cffunction name="deleteSomething" access="public" returntype="void">
    <cfargument name="somethingId" type="numeric" required="yes">

    <cfquery datasource="#dsn()#">
        DELETE
        FROM Something
        WHERE id = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.somethingId#">;   
    </cfquery>

</cffunction>


<cfset deleteSomething('1 2')>

Aqui otype="numeric" validação de argumentos (que talvez seja baseada no mesmo algoritmoisValidnão joga com'1 2'. Pior ainda,cfqueryparam cfsqltype="cf_sql_integer" parece estar usandoint para converter o valor que acabará sendo41276.

Em outras palavras,deleteSomething('1 2') irá apagar a entidade com id41276 em vez de lançar uma exceção desde o valor1 2 obviamente não é numérico.

Agora, a única correção que pensei foi realizar a validação adicional de argumentos usandoisValid('integer', ... ou uma expressão regular, mas isso é uma dor real e, além disso, eu nunca entendi porque eles não implementaramtype="integer"?

Obviamente, eu também sempre fiz a falsa suposição de quecfqueryparam type="cf_sql_integer" validaria que o valor passado é um inteiro válido.

EDITAR:

Parece que mesmoisvalid('integer', ... também não é confiável como podemos ver em
Por que isvalid ("integer", "1,5") = YES?

EDIT2:

Eu sei que eu poderia adicionar validação de argumentos adicionais para cada argumento inteiro esperado em cada função, no entanto, isso exigiria para corrigir uma enorme base de código no meu caso e também é muito propenso a erros. Ele também torna a validação de argumento interna completamente inútil nesse caso.

Preferia preferir uma solução onde pudessecriar e aplicar um patch não oficial. Essa é uma opção realista? Se assim for, gostaria de ser apontado na direção certa.

EDIT3: Não resolve todos os problemas, mas o CF11 adicionou suporte para umstrictNumberValidation configuração em nível de aplicativo.

"A partir do ColdFusion 11, essa função é avaliada em uma base mais rígida. Configurar esse valor como false faz a função isValid se comportar da maneira mais antiga. Essa configuração afeta as tags cfargument, cfparam e cfform sempre que a validação numérica e inteira for usada. Nesta configuração, a validação também reflete nessas tags. "

questionAnswers(2)

yourAnswerToTheQuestion