ColdFusion 9: int и type = «numeric» противная ошибка?

Я только что испытал поведение, которое не поддается никакой логике и потенциально может привести к серьезным проблемам, и мне было интересно, еслиэто была ошибка, или если поведение было изменено, и каковы лучшие методы, чтобы обойти проблему? Если это ошибка, есть ли патч?

Вот два странных поведения, которые вместе взятые представляют угрозу для целостности данных любой системы.

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

Почему? Ну посмотрим ...

<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')>

Здесьtype="numeric" проверка аргументов (возможно, основанная на том же алгоритме, что иisValid?) не бросает с'1 2', Еще хуже,cfqueryparam cfsqltype="cf_sql_integer" кажется используетint преобразовать значение, которое в конечном итоге будет41276.

Другими словами,deleteSomething('1 2') удалит сущность с идентификатором41276 вместо того, чтобы генерировать исключение, так как значение1 2 явно не числовой.

Теперь единственное исправление, о котором я подумал, - это проверка дополнительных аргументов с помощьюisValid('integer', ... или регулярное выражение, но это настоящая боль и, кроме того, я никогда не понимал, почему они не реализовалиtype="integer"?

Очевидно, я также всегда делал ложное предположение, чтоcfqueryparam type="cf_sql_integer" подтвердит, что переданное значение является допустимым целым числом.

РЕДАКТИРОВАТЬ:

Кажется, что дажеisvalid('integer', ... также не является надежным, как мы можем видеть в
Почему isvalid ("integer", "1,5") = YES?

EDIT2:

Я знаю, что я мог бы добавить проверку дополнительных аргументов для каждого ожидаемого целочисленного аргумента в каждой функции, однако это потребовало бы исправления огромной базы кода в моем случае, и это также очень подвержено ошибкам. Это также делает проверку встроенного аргумента совершенно бесполезной в этом случае.

Я бы предпочел решение, где я могсоздать и применить неофициальный патч, Это реалистичный вариант? Если это так, я хотел бы указать в правильном направлении.

EDIT3: он не решает все проблемы, но CF11 добавил поддержкуstrictNumberValidation настройка уровня приложения.

«Начиная с ColdFusion 11, эта функция оценивается более строго. Если установить для этого значения значение false, функция isValid будет работать по-старому. Этот параметр влияет на теги cfargument, cfparam и cfform везде, где используется целочисленная и числовая проверка. На основе этот параметр проверки также отражается в этих тегах. "

Ответы на вопрос(2)

Ваш ответ на вопрос