Help with Garage and sanitized strings...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Help with Garage and sanitized strings...

CdAB63

Good evening,


I was trying to sanitize statements, but something went awkward. The following non sanitized codelet works ok:

    str := 'INSERT INTO chaves_de_encriptacao (
                    numero_funcional,
                    chave_privada,
                    chave_publica) VALUES (''',
                    self personId leaId asString,''', ''',
                    self keyPair privateKey asAsn1DerBytes asByteArray hex,''', ''',
                    self keyPair publicKey asAsn1DerBytes asByteArray hex,''')'.

    [ dbConnection execute: str ] on: Exception do: [ ^ false ].


But sanitized one:

    str := dbConnection createStatement: 'INSERT INTO chaves_de_encriptacao (
                        numero_funcional,
                        chave_privada,
                        chave_publica) VALUES (''?'', ''?'', ''?'')'.

    str prepare.

    str at: 1 bind: self personId leaId asString.
    str at: 2 bind: self keyPair privateKey asAsn1DerBytes asByteArray hex.
    str at: 3 bind: self keyPair publicKey asAsn1DerBytes asByteArray hex.


    str execute.


returns exception mysqld_stmt_send_long_data (obviously same thing happens with the shorthand

    str := dbConnection prepare: ...

And I inspect most things but could not understand what's going bad.

numero_funcional is INT(11)

chave_privada is VARBINARY(4096)

chave_publica is VARBINARY(4096)

Currently private and public keys are RSA 2048 keys (so, easilly under the 4096 bytes available).

I wonder if the at: bind: consider that the parameter is a string ended by \0 or something like that (that would explain the error message).

As SQL is not my field, I wonder if someone could help to elucidate what's going on.



Best regards,


Casimiro Barreto