diff options
Diffstat (limited to 'ext/sybase')
| -rw-r--r-- | ext/sybase/php_sybase_db.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/ext/sybase/php_sybase_db.c b/ext/sybase/php_sybase_db.c index aef81e29f5..d7c908cdfa 100644 --- a/ext/sybase/php_sybase_db.c +++ b/ext/sybase/php_sybase_db.c @@ -720,11 +720,14 @@ static void php_sybase_get_column_content(sybase_link *sybase_ptr,int offset,pva  			if (dbwillconvert(coltype(offset),SYBCHAR)) {  				char *res_buf;  				int res_length = dbdatlen(sybase_ptr->link,offset); +				int src_length = res_length;  				register char *p;  				switch (coltype(offset)) {  					case SYBBINARY:  					case SYBVARBINARY: +						res_length *= 2; +						break;  					case SYBCHAR:  					case SYBVARCHAR:  					case SYBTEXT: @@ -740,15 +743,16 @@ static void php_sybase_get_column_content(sybase_link *sybase_ptr,int offset,pva  				memset(res_buf,' ',res_length+1);  /* XXX i'm sure there's a better way  													  but i don't have sybase here to test  													  991105 thies@thieso.net  */ -				dbconvert(NULL,coltype(offset),dbdata(sybase_ptr->link,offset), res_length,SYBCHAR,res_buf,-1); +				dbconvert(NULL,coltype(offset),dbdata(sybase_ptr->link,offset), res_length,SYBCHAR,res_buf,res_length);  				/* get rid of trailing spaces */  				p = res_buf + res_length; -				while (*p == ' ') { +				while (p >= res_buf && *p == ' ') {  					p--; -					res_length--;  				}  				*(++p) = 0; /* put a trailing NULL */ +				res_length = p - res_buf; +				  				Z_STRLEN_P(result) = res_length;  				Z_STRVAL_P(result) = res_buf;  | 
