summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorgkodinov/kgeorge@magare.gmz <>2007-07-05 18:24:48 +0300
committergkodinov/kgeorge@magare.gmz <>2007-07-05 18:24:48 +0300
commit1532452a00e49a71880707f4ae279d19aab14724 (patch)
tree6e27b6c33885046dbc55c5dac0b78be8aee3489c /sql
parenteb454f85d96666f2116e683c2e016d6dfcf83854 (diff)
downloadmariadb-git-1532452a00e49a71880707f4ae279d19aab14724.tar.gz
Bug #29166:
AsText() needs to know the maximum number of characters a IEEE double precision value can occupy to make sure there's enough buffer space. The number was too small to hold all possible values and this caused buffer overruns. Fixed by correcting the calculation of the maximum digits in a string representation of an IEEE double precision value as printed by String::qs_append(double).
Diffstat (limited to 'sql')
-rw-r--r--sql/spatial.cc23
1 files changed, 22 insertions, 1 deletions
diff --git a/sql/spatial.cc b/sql/spatial.cc
index 939e7d2a3b4..69d0c15748a 100644
--- a/sql/spatial.cc
+++ b/sql/spatial.cc
@@ -17,7 +17,28 @@
#ifdef HAVE_SPATIAL
-#define MAX_DIGITS_IN_DOUBLE 16
+/*
+ exponential notation :
+ 1 sign
+ 1 number before the decimal point
+ 1 decimal point
+ 14 number of significant digits (see String::qs_append(double))
+ 1 'e' sign
+ 1 exponent sign
+ 3 exponent digits
+ ==
+ 22
+
+ "f" notation :
+ 1 optional 0
+ 1 sign
+ 14 number significant digits (see String::qs_append(double) )
+ 1 decimal point
+ ==
+ 17
+*/
+
+#define MAX_DIGITS_IN_DOUBLE 22
/***************************** Gis_class_info *******************************/