summaryrefslogtreecommitdiff
path: root/strings/decimal.c
diff options
context:
space:
mode:
authorTatiana A. Nurnberg <azundris@mysql.com>2010-11-11 09:46:49 +0000
committerTatiana A. Nurnberg <azundris@mysql.com>2010-11-11 09:46:49 +0000
commitccbc24b45a79b6407487550fa19b40752d22fa7f (patch)
tree37756177474cec058aad2e54b7fe51395c380c84 /strings/decimal.c
parent58dfba2899474553592479be24ef73947775eeaf (diff)
downloadmariadb-git-ccbc24b45a79b6407487550fa19b40752d22fa7f.tar.gz
Bug#55436: buffer overflow in debug binary of dbug_buff in Field_new_decimal::store_value
There were some misunderstandings about parameters pertaining to buffer-size. Patches fixes the reported off by one and clarifies the documentation. mysql-test/r/type_newdecimal.result: add test mysql-test/t/type_newdecimal.test: add test sql/field.cc: adjust buffer size by one to account for terminator. sql/my_decimal.cc: adjust buffer size by one to account for terminator. clarify needs in comments. sql/my_decimal.h: clarify buffer-size needs to prevent future off-by-one bugs. strings/decimal.c: clarify buffer-size needs and parameters to prevent future off-by-one bugs
Diffstat (limited to 'strings/decimal.c')
-rw-r--r--strings/decimal.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/strings/decimal.c b/strings/decimal.c
index bda296ce832..c91a5d1a7ec 100644
--- a/strings/decimal.c
+++ b/strings/decimal.c
@@ -320,8 +320,8 @@ int decimal_actual_fraction(decimal_t *from)
from - value to convert
to - points to buffer where string representation
should be stored
- *to_len - in: size of to buffer
- out: length of the actually written string
+ *to_len - in: size of to buffer (incl. terminating '\0')
+ out: length of the actually written string (excl. '\0')
fixed_precision - 0 if representation can be variable length and
fixed_decimals will not be checked in this case.
Put number as with fixed point position with this
@@ -338,6 +338,7 @@ int decimal2string(decimal_t *from, char *to, int *to_len,
int fixed_precision, int fixed_decimals,
char filler)
{
+ /* {intg_len, frac_len} output widths; {intg, frac} places in input */
int len, intg, frac= from->frac, i, intg_len, frac_len, fill;
/* number digits before decimal point */
int fixed_intg= (fixed_precision ?