From: <asf...@us...> - 2011-06-04 18:42:43
|
Revision: 53114 http://firebird.svn.sourceforge.net/firebird/?rev=53114&view=rev Author: asfernandes Date: 2011-06-04 18:42:37 +0000 (Sat, 04 Jun 2011) Log Message: ----------- Backport fix for CORE-3479 - ASCII_VAL raises error instead of return 0 for empty strings. Modified Paths: -------------- firebird/branches/B2_5_Release/doc/WhatsNew firebird/branches/B2_5_Release/src/jrd/SysFunction.cpp Modified: firebird/branches/B2_5_Release/doc/WhatsNew =================================================================== --- firebird/branches/B2_5_Release/doc/WhatsNew 2011-06-04 03:38:33 UTC (rev 53113) +++ firebird/branches/B2_5_Release/doc/WhatsNew 2011-06-04 18:42:37 UTC (rev 53114) @@ -49,6 +49,11 @@ Contributor(s): Alex Peshkov <peshkoff at mail.ru> + * Bugfix CORE-3479 + ASCII_VAL raises error instead of return 0 for empty strings. + Contributor(s): + Adriano dos Santos Fernandes <adrianosf at uol.com.br> + * Bugfix CORE-3477 Passing non-existing SQL parameters always crash server Contributor(s): Modified: firebird/branches/B2_5_Release/src/jrd/SysFunction.cpp =================================================================== --- firebird/branches/B2_5_Release/src/jrd/SysFunction.cpp 2011-06-04 03:38:33 UTC (rev 53113) +++ firebird/branches/B2_5_Release/src/jrd/SysFunction.cpp 2011-06-04 18:42:37 UTC (rev 53114) @@ -1153,12 +1153,19 @@ UCHAR* p; MoveBuffer temp; int length = MOV_make_string2(tdbb, value, value->getCharSet(), &p, temp); - UCHAR dummy[4]; - if (cs->substring(length, p, sizeof(dummy), dummy, 0, 1) != 1) - status_exception::raise(Arg::Gds(isc_arith_except) << Arg::Gds(isc_transliteration_failed)); + if (length == 0) + impure->vlu_misc.vlu_short = 0; + else + { + UCHAR dummy[4]; - impure->vlu_misc.vlu_short = (length > 0 ? p[0] : 0); + if (cs->substring(length, p, sizeof(dummy), dummy, 0, 1) != 1) + status_exception::raise(Arg::Gds(isc_arith_except) << Arg::Gds(isc_transliteration_failed)); + + impure->vlu_misc.vlu_short = p[0]; + } + impure->vlu_desc.makeShort(0, &impure->vlu_misc.vlu_short); return &impure->vlu_desc; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |