|
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.
|