From: <ale...@us...> - 2010-11-19 17:37:04
|
Revision: 51944 http://firebird.svn.sourceforge.net/firebird/?rev=51944&view=rev Author: alexpeshkoff Date: 2010-11-19 17:36:57 +0000 (Fri, 19 Nov 2010) Log Message: ----------- Backported improvement CORE-3248: Set unused bytes of varchar values in message buffer to 0 Modified Paths: -------------- firebird/branches/B2_5_Release/src/common/cvt.cpp Modified: firebird/branches/B2_5_Release/src/common/cvt.cpp =================================================================== --- firebird/branches/B2_5_Release/src/common/cvt.cpp 2010-11-19 17:35:24 UTC (rev 51943) +++ firebird/branches/B2_5_Release/src/common/cvt.cpp 2010-11-19 17:36:57 UTC (rev 51944) @@ -1393,9 +1393,11 @@ } break; + case dtype_varying: + MOVE_CLEAR(to->dsc_address, to->dsc_length); + // fall through ... case dtype_text: case dtype_cstring: - case dtype_varying: switch (from->dsc_dtype) { case dtype_dbkey: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2011-10-12 09:52:13
|
Revision: 53552 http://firebird.svn.sourceforge.net/firebird/?rev=53552&view=rev Author: alexpeshkoff Date: 2011-10-12 09:52:07 +0000 (Wed, 12 Oct 2011) Log Message: ----------- Fixed CORE-3627: Server crashes with access violation when inserting row into table with unique index Modified Paths: -------------- firebird/branches/B2_5_Release/src/common/cvt.cpp Modified: firebird/branches/B2_5_Release/src/common/cvt.cpp =================================================================== --- firebird/branches/B2_5_Release/src/common/cvt.cpp 2011-10-12 03:26:58 UTC (rev 53551) +++ firebird/branches/B2_5_Release/src/common/cvt.cpp 2011-10-12 09:52:07 UTC (rev 53552) @@ -1703,13 +1703,12 @@ * A data conversion error occurred. Complain. * **************************************/ - const char* p; - VaryStr<41> s; + Firebird::string message; if (desc->dsc_dtype == dtype_blob) - p = "BLOB"; + message = "BLOB"; else if (desc->dsc_dtype == dtype_array) - p = "ARRAY"; + message = "ARRAY"; else { // CVC: I don't have access here to JRD_get_thread_data())->tdbb_status_vector @@ -1724,9 +1723,11 @@ try { + const char* p; + VaryStr<41> s; const USHORT length = CVT_make_string(desc, ttype_ascii, &p, &s, sizeof(s) - 1, localError); - const_cast<char*>(p)[length] = 0; + message.assign(p, length); } /* catch (status_exception& e) @@ -1744,11 +1745,11 @@ */ catch (DummyException&) { - p = "<Too long string or can't be translated>"; + message = "<Too long string or can't be translated>"; } } - err(Arg::Gds(isc_convert_error) << p); + err(Arg::Gds(isc_convert_error) << message); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2013-01-24 09:29:49
|
Revision: 57617 http://sourceforge.net/p/firebird/code/57617 Author: dimitr Date: 2013-01-24 09:29:46 +0000 (Thu, 24 Jan 2013) Log Message: ----------- This trivial optimization saves a few percents of performance when reading/writing DBKEYs from/to compatible local variables. Modified Paths: -------------- firebird/branches/B2_5_Release/src/common/cvt.cpp Modified: firebird/branches/B2_5_Release/src/common/cvt.cpp =================================================================== --- firebird/branches/B2_5_Release/src/common/cvt.cpp 2013-01-24 07:10:29 UTC (rev 57616) +++ firebird/branches/B2_5_Release/src/common/cvt.cpp 2013-01-24 09:29:46 UTC (rev 57617) @@ -1286,6 +1286,21 @@ return; } + // Special optimization case: RDB$DB_KEY is binary compatible with CHAR(8) OCTETS + + if ((from->dsc_dtype == dtype_text && + to->dsc_dtype == dtype_dbkey && + from->dsc_ttype() == ttype_binary && + from->dsc_length == to->dsc_length) || + (to->dsc_dtype == dtype_text && + from->dsc_dtype == dtype_dbkey && + to->dsc_ttype() == ttype_binary && + from->dsc_length == to->dsc_length)) + { + memcpy(p, q, length); + return; + } + // Do data type by data type conversions. Not all are supported, // and some will drop out for additional handling. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2013-04-28 13:33:59
|
Revision: 58002 http://sourceforge.net/p/firebird/code/58002 Author: dimitr Date: 2013-04-28 13:33:56 +0000 (Sun, 28 Apr 2013) Log Message: ----------- Simple fix for CORE-4093: Server crashes while converting an overscaled numeric to a string. It assumes the resulting string being limited in length by the scale (value <= 128). A more generic solution (e.g. disallow overflowing scales) would be appreciated for the trunk. Modified Paths: -------------- firebird/branches/B2_5_Release/src/common/cvt.cpp Modified: firebird/branches/B2_5_Release/src/common/cvt.cpp =================================================================== --- firebird/branches/B2_5_Release/src/common/cvt.cpp 2013-04-28 11:52:02 UTC (rev 58001) +++ firebird/branches/B2_5_Release/src/common/cvt.cpp 2013-04-28 13:33:56 UTC (rev 58002) @@ -343,29 +343,25 @@ u = -n; } - UCHAR temp[32]; - UCHAR* p = temp; + string temp; do { - *p++ = (UCHAR) (u % 10) + '0'; + temp += (u % 10) + '0'; u /= 10; } while (u); - SSHORT l = p - temp; + SSHORT l = (SSHORT) temp.length(); // if scale < 0, we need at least abs(scale)+1 digits, so add // any leading zeroes required. while (l + scale <= 0) { - *p++ = '0'; + temp += '0'; l++; } // postassertion: l+scale > 0 fb_assert(l + scale > 0); - // CVC: also, we'll check for buffer overflow directly. - fb_assert(temp + sizeof(temp) >= p); - // Compute the total length of the field formatted. Make sure it // fits. Keep in mind that routine handles both string and varying // string fields. @@ -379,6 +375,7 @@ CVT_conversion_error(from, cb->err); } + const UCHAR* p = (UCHAR*) temp.c_str() + temp.length(); UCHAR* q = (to->dsc_dtype == dtype_varying) ? to->dsc_address + sizeof(USHORT) : to->dsc_address; const UCHAR* start = q; @@ -1739,7 +1736,7 @@ try { const char* p; - VaryStr<41> s; + VaryStr<128> s; const USHORT length = CVT_make_string(desc, ttype_ascii, &p, &s, sizeof(s) - 1, localError); message.assign(p, length); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2013-04-28 14:10:50
|
Revision: 58005 http://sourceforge.net/p/firebird/code/58005 Author: dimitr Date: 2013-04-28 14:10:47 +0000 (Sun, 28 Apr 2013) Log Message: ----------- Corrected the target buffer length. Modified Paths: -------------- firebird/branches/B2_5_Release/src/common/cvt.cpp Modified: firebird/branches/B2_5_Release/src/common/cvt.cpp =================================================================== --- firebird/branches/B2_5_Release/src/common/cvt.cpp 2013-04-28 13:50:00 UTC (rev 58004) +++ firebird/branches/B2_5_Release/src/common/cvt.cpp 2013-04-28 14:10:47 UTC (rev 58005) @@ -1738,7 +1738,7 @@ const char* p; VaryStr<128> s; const USHORT length = - CVT_make_string(desc, ttype_ascii, &p, &s, sizeof(s) - 1, localError); + CVT_make_string(desc, ttype_ascii, &p, &s, sizeof(s), localError); message.assign(p, length); } /* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2015-02-18 12:53:33
|
Revision: 60715 http://sourceforge.net/p/firebird/code/60715 Author: dimitr Date: 2015-02-18 12:53:30 +0000 (Wed, 18 Feb 2015) Log Message: ----------- Misc. Modified Paths: -------------- firebird/branches/B2_5_Release/src/common/cvt.cpp Modified: firebird/branches/B2_5_Release/src/common/cvt.cpp =================================================================== --- firebird/branches/B2_5_Release/src/common/cvt.cpp 2015-02-18 12:53:00 UTC (rev 60714) +++ firebird/branches/B2_5_Release/src/common/cvt.cpp 2015-02-18 12:53:30 UTC (rev 60715) @@ -2237,7 +2237,9 @@ fb_assert(cb != NULL); fb_assert((temp != NULL && length > 0) || desc->dsc_dtype == dtype_text || - desc->dsc_dtype == dtype_cstring || desc->dsc_dtype == dtype_varying); + desc->dsc_dtype == dtype_cstring || + desc->dsc_dtype == dtype_varying || + desc->dsc_dtype == dtype_dbkey); // If the value is already a string (fixed or varying), just return // the address and length. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |