> On Jun 18, 2021, at 7:22 AM, Craig Francis <cr...@craigfrancis.co.uk> wrote:
> 
> On Fri, 18 Jun 2021 at 11:45 am, Guilliam Xavier <guilliam.xav...@gmail.com>
> wrote:
> 
>> IIUC, with the addition of integers, the function will return true for e.g.
>> `'SELECT * FROM foo LIMIT ' . (int)$limit` even if $limit doesn't come from
>> a "static" value (e.g. random_int() or even `$_GET['limit']`)
> 
> Yes, that’s correct.
> 
> Supporting integers from any source helps with adoption, and we cannot find
> any security issues (it’s a fairly small change to the RFC, and that
> prompted the new name, especially as the original is_literal wasn’t
> perfect).

For the avoidance of doubt can you confirm that this $sql would indeed be 
trusted?

$ids = array_map( 'intval', $_GET['ids'] ?? [] );
$where = implode( ',', $ids );
$sql = 'SELECT * FROM foo WHERE id IN (' . $where . ')';

Also, as it is painful to have to use string concatenation, can we please 
consider supporting only the '%s' and '%d' format specifiers when used with 
trusted strings and integers for sprintf(), respectfully:

$sql = sprintf( 'SELECT * FROM foo WHERE id IN (%s)', $where );

And

$sql = sprintf( 'SELECT * FROM foo LIMIT %d', (int)$limit );

-Mike

Reply via email to