In file qsql_ibase.cpp in the function QIBaseResult::exec():
There is a for loop through all input parameters, inside this loop the sql parameter type is checked for null-ability (sqltype & 1 ): If this is true the parameter can be null and the if the argument is null the null flag is set and all is well.
But if, for example, the type is "not null" constrained (e.g. a procedure input parameter) the code proceeds immediately to the switch statement where the argument is converted to whatever is needed, without the check for QSqlResultPrivate::isVariantNull(val).
The values not null constraint cannot be enforced because the null is converted to a zero (in case of an integer parameter), which can leads to hard to find bugs.
In this case the QIBaseResult::exec() call should return an error, so the wrong argument could be detected.