Skip to Content.
Sympa Menu

freetds - Patch for convert.c

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Frediano Ziglio <freddyz77 AT tin.it>
  • To: FreeTDS <freetds AT franklin.oit.unc.edu>
  • Subject: Patch for convert.c
  • Date: 04 Aug 2002 17:13:04 +0200


This is a small patch that
- add overflow check on int to int convert
- add conversion from int4 to bit
- fix some indent problem
- some cleanup

note on point 2. Is correct to convert integer != 0 to bit 1 or is best
to return fail ?

I put patch online (or if become older next day...)

Index: src/tds/convert.c
===================================================================
RCS file: /cvsroot/freetds/freetds/src/tds/convert.c,v
retrieving revision 1.29
diff -u -r1.29 convert.c
--- src/tds/convert.c 4 Aug 2002 13:43:11 -0000 1.29
+++ src/tds/convert.c 4 Aug 2002 15:07:38 -0000
@@ -63,7 +63,6 @@
#define test_alloc(x) {if ((x)==NULL) return TDS_FAIL;}
extern int g__numeric_bytes_per_prec[];

-extern int (*g_tds_err_handler)(void*);
int tds_get_conversion_type(int srctype, int colsize)
{
if (srctype == SYBINTN) {
@@ -501,33 +500,35 @@
case SYBTEXT:
case SYBVARCHAR:
sprintf(tmp_str,"%d",buf);
- cr->c = malloc(strlen(tmp_str) + 1);
+ cr->c = malloc(strlen(tmp_str) + 1);
test_alloc(cr->c);
strcpy(cr->c,tmp_str);
- return strlen(tmp_str);
+ return strlen(tmp_str);
break;
case SYBINT1:
+ if (buf > 255 || buf < 0)
+ return TDS_FAIL;
cr->ti = buf;
- return 1;
+ return 1;
break;
case SYBINT2:
cr->si = buf;
- return 2;
+ return 2;
break;
case SYBINT4:
cr->i = buf;
- return 4;
+ return 4;
break;
case SYBFLT8:
cr->f = buf;
- return 8;
+ return 8;
break;
case SYBREAL:
cr->r = buf;
- return 4;
+ return 4;
break;
default:
- fprintf(stderr,"error_handler: conversion from %d to %d not
supported\n", srctype, desttype);
+ fprintf(stderr,"error_handler: conversion from
%d to %d not supported\n", srctype, desttype);
return TDS_FAIL;
}
}
@@ -544,33 +545,41 @@
case SYBTEXT:
case SYBVARCHAR:
sprintf(tmp_str,"%d",buf);
- cr->c = malloc(strlen(tmp_str) + 1);
+ cr->c = malloc(strlen(tmp_str) + 1);
test_alloc(cr->c);
strcpy(cr->c,tmp_str);
- return strlen(tmp_str);
+ return strlen(tmp_str);
break;
case SYBINT1:
+ if (buf > 255 || buf < 0)
+ return TDS_FAIL;
cr->ti = buf;
- return 1;
+ return 1;
break;
case SYBINT2:
+ if (buf > 32767 || buf < -32768)
+ return TDS_FAIL;
cr->si = buf;
- return 2;
+ return 2;
break;
case SYBINT4:
cr->i = buf;
- return 4;
+ return 4;
break;
+ case SYBBIT:
+ case SYBBITN:
+ cr->ti = buf ? 1 : 0;
+ return 1;
case SYBFLT8:
cr->f = buf;
- return 8;
+ return 8;
break;
case SYBREAL:
cr->r = buf;
- return 4;
+ return 4;
break;
default:
- fprintf(stderr,"error_handler: conversion from %d to %d not
supported\n", srctype, desttype);
+ fprintf(stderr,"error_handler: conversion from
%d to %d not supported\n", srctype, desttype);
return TDS_FAIL;
}
}
@@ -735,8 +744,6 @@
char whole_date_string[30];
struct tds_tm when;

-TDS_INT ret;
-
switch(desttype) {
case SYBCHAR:
case SYBVARCHAR:
@@ -831,7 +838,6 @@
default:
fprintf(stderr,"error_handler: conversion from %d to %d not
supported\n", srctype, desttype);
return TDS_FAIL;
- break;
}

}
@@ -930,7 +936,6 @@
default:
fprintf(stderr,"error_handler: conversion from %d to %d not
supported\n", srctype, desttype);
return TDS_FAIL;
- break;
}


@@ -1026,6 +1031,7 @@
}
}

+static TDS_INT
tds_convert_unique(int srctype,TDS_CHAR *src, TDS_INT srclen,
int desttype,TDS_INT destlen, CONV_RESULT *cr)
{

freddy77






Archive powered by MHonArc 2.6.24.

Top of Page