From e9d23b5a89241ccd290ad3da43e7947f7e161222 Mon Sep 17 00:00:00 2001 From: Kristofer Pettersson Date: Thu, 15 Sep 2011 10:01:15 +0200 Subject: [PATCH] Bug#11764310 - 57132: CONV FUNCTION CRASHES, NEGATIVE ARGUMENT TO MEMCPY Amendment to previous patch: Failure in CONV() should return NULL instead of empty set. When compiled on Windows or Solaris the function Item_func_conv::val_str() doesn't fail on longlong2str() but finds an earlier exit path based on the attributes of the arguments. This exit path returns NULL on failure and as a consequence the original patch caused different test results depending on the OS used. --- mysql-test/r/func_str.result | 2 +- sql/item_strfunc.cc | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result index 5a582f08829..d3757f799ce 100644 --- a/mysql-test/r/func_str.result +++ b/mysql-test/r/func_str.result @@ -2789,7 +2789,7 @@ DROP TABLE t1; # SELECT CONV(1,-2147483648,-2147483648); CONV(1,-2147483648,-2147483648) - +NULL # # End of 5.5 tests # diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index c6e9384bc5e..a0fdb3cf811 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2954,7 +2954,10 @@ String *Item_func_conv::val_str(String *str) if (!(ptr= longlong2str(dec, ans, to_base)) || str->copy(ans, (uint32) (ptr - ans), default_charset())) - return make_empty_result(); + { + null_value= 1; + return NULL; + } return str; }