Skip to Content.
Sympa Menu

freetds - Re: [freetds] Truncation of string values to 80 characters using placeholders and MSSQL

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "James K. Lowden" <jklowden AT freetds.org>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] Truncation of string values to 80 characters using placeholders and MSSQL
  • Date: Sun, 8 May 2011 18:48:55 -0400

On Thu, 5 May 2011 14:21:18 +0000 (UTC)
Ed Avis <eda AT waniasset.com> wrote:

> As others have mentioned, the bug appears to be caused in
> src/tds/query.c and can be largely fixed with this patch:
>
> --- freetds-0.91RC2-orig/src/tds/query.c 2011-03-30
> +++ freetds-0.91RC2-patch_truncation/src/tds/query.c 2011-05-05
> @@ -799,7 +799,7 @@
> if (tds_get_column_declaration(tds,
> params->columns[i], \ declaration + strlen(declaration)) == TDS_FAIL)
> goto Cleanup;
> } else {
> - strcat(declaration, "varchar(80)");
> + strcat(declaration, "varchar(4000)");
> }
>
> /* convert it to ucs2 and append */
>
> However, I'm not sure that every server accepts varchar(4000) as a
> column type, and some may allow even larger varchars (so that the
> fixed code is still buggy if the string is longer than 4000 chars).
> I'd be interested in your thoughts on the right way to fix it.

Thanks for the patch. It will help many DBD::Sybase users. I applied
it, along with some minor typographical changes, to CVS HEAD and to the
0.91 release branch.

This is a perfect example of fixing what matters. I personally don't
use parameterized queries and await a real fix ;-) which will involve
passing a parameter descriptor to ct-lib. Meanwhile, your one-liner
solves an immediate problem for any reasonably modern Microsoft
server.

--jkl




Archive powered by MHonArc 2.6.24.

Top of Page