components/mysql-5-1/patches/bug68591.patch
author Ramesh Maddali<ramesh.maddali@oracle.com>
Wed, 17 Jul 2013 00:17:02 -0700
branchs11-update
changeset 2680 70e041ba5b04
permissions -rw-r--r--
15688738 problem in database/mysql
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2680
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
     1
# Fixes Solaris bug #15688738
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
     2
# ===========================
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
     3
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
     4
--- sql/spatial.h	revid:[email protected]
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
     5
+++ sql/spatial.h	2013-06-26 05:14:10 +0000
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
     6
@@ -324,6 +324,26 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
     7
   {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
     8
     return (cur_data + data_amount > m_data_end);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
     9
   }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    10
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    11
+  /**
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    12
+     Check if there're enough points remaining as requested
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    13
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    14
+     Need to perform the calculation in logical units, since multiplication
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    15
+     can overflow the size data type.
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    16
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    17
+     @arg data              pointer to the begining of the points array
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    18
+     @arg expected_points   number of points expected
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    19
+     @arg extra_point_space extra space for each point element in the array
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    20
+     @return               true if there are not enough points
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    21
+  */
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    22
+  inline bool not_enough_points(const char *data, uint32 expected_points,
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    23
+                                uint32 extra_point_space = 0) const
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    24
+  {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    25
+    return (m_data_end < data ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    26
+            (expected_points > ((m_data_end - data) /
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    27
+                                (POINT_DATA_SIZE + extra_point_space))));
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    28
+  }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    29
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    30
   const char *m_data;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    31
   const char *m_data_end;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    32
 };
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    33
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    34
=== modified file 'sql/spatial.cc'
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    35
--- sql/spatial.cc	revid:[email protected]
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    36
+++ sql/spatial.cc	2013-06-26 05:14:10 +0000
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    37
@@ -393,7 +393,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    38
   points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    39
   data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    40
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    41
-  if (no_data(data, (SIZEOF_STORED_DOUBLE * 2 + offset) * points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    42
+  if (not_enough_points(data, points, offset))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    43
     return 0;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    44
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    45
   /* Calculate MBR for points */
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    46
@@ -476,9 +476,16 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    47
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    48
 uint32 Gis_line_string::get_data_size() const 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    49
 {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    50
+  size_t n_points;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    51
   if (no_data(m_data, 4))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    52
     return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    53
-  return 4 + uint4korr(m_data) * POINT_DATA_SIZE;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    54
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    55
+  n_points= uint4korr(m_data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    56
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    57
+  if (not_enough_points(m_data + 4, n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    58
+    return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    59
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    60
+  return 4 + n_points * POINT_DATA_SIZE;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    61
 }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    62
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    63
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    64
@@ -548,7 +555,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    65
   data += 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    66
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    67
   if (n_points < 1 ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    68
-      no_data(data, SIZEOF_STORED_DOUBLE * 2 * n_points) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    69
+      not_enough_points(data, n_points) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    70
       txt->reserve(((MAX_DIGITS_IN_DOUBLE + 1)*2 + 1) * n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    71
     return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    72
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    73
@@ -585,7 +592,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    74
     return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    75
   n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    76
   data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    77
-  if (n_points < 1 || no_data(data, SIZEOF_STORED_DOUBLE * 2 * n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    78
+  if (n_points < 1 || not_enough_points(data, n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    79
     return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    80
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    81
   get_point(&prev_x, &prev_y, data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    82
@@ -619,7 +626,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    83
     return 0;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    84
   }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    85
   data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    86
-  if (no_data(data, SIZEOF_STORED_DOUBLE * 2 * n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    87
+  if (n_points == 0 || not_enough_points(data, n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    88
     return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    89
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    90
   /* Get first point */
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    91
@@ -690,9 +697,16 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    92
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    93
   while (n_linear_rings--)
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    94
   {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    95
+    size_t n_points;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    96
     if (no_data(data, 4))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    97
       return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    98
-    data+= 4 + uint4korr(data)*POINT_DATA_SIZE;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
    99
+    n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   100
+    data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   101
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   102
+    if (not_enough_points(data, n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   103
+      return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   104
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   105
+    data+= n_points * POINT_DATA_SIZE;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   106
   }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   107
   return (uint32) (data - m_data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   108
 }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   109
@@ -786,8 +800,9 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   110
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   111
     n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   112
     data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   113
-    if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   114
-	txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1) * 2 + 1) * n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   115
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   116
+    if (not_enough_points(data, n_points) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   117
+        txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1) * 2 + 1) * n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   118
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   119
     txt->qs_append('(');
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   120
     data= append_points(txt, n_points, data, 0);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   121
@@ -840,7 +855,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   122
     if (no_data(data, 4))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   123
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   124
     n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   125
-    if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   126
+    if (not_enough_points(data, n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   127
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   128
     get_point(&prev_x, &prev_y, data+4);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   129
     data+= (4+SIZEOF_STORED_DOUBLE*2);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   130
@@ -876,7 +891,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   131
   n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   132
   data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   133
   length= n_points * POINT_DATA_SIZE;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   134
-  if (no_data(data, length) || result->reserve(1+4+4+ length))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   135
+  if (not_enough_points(data, n_points) || result->reserve(1+4+4+ length))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   136
     return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   137
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   138
   result->q_append((char) wkb_ndr);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   139
@@ -922,7 +937,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   140
   n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   141
   points_size= n_points * POINT_DATA_SIZE;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   142
   data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   143
-  if (no_data(data, points_size) || result->reserve(1+4+4+ points_size))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   144
+  if (not_enough_points(data, n_points) || result->reserve(1+4+4+ points_size))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   145
     return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   146
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   147
   result->q_append((char) wkb_ndr);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   148
@@ -964,7 +979,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   149
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   150
     org_n_points= n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   151
     data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   152
-    if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   153
+    if (not_enough_points(data, n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   154
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   155
     get_point(&prev_x, &prev_y, data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   156
     data+= (SIZEOF_STORED_DOUBLE*2);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   157
@@ -1021,14 +1036,21 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   158
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   159
 /***************************** MultiPoint *******************************/
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   160
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   161
-uint32 Gis_multi_point::get_data_size() const 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   162
+uint32 Gis_multi_point::get_data_size() const
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   163
 {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   164
+  size_t n_points;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   165
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   166
   if (no_data(m_data, 4))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   167
     return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   168
-  return 4 + uint4korr(m_data)*(POINT_DATA_SIZE + WKB_HEADER_SIZE);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   169
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   170
+  n_points= uint4korr(m_data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   171
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   172
+  if (not_enough_points(m_data + 4, n_points, WKB_HEADER_SIZE))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   173
+    return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   174
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   175
+  return 4 + n_points * (POINT_DATA_SIZE + WKB_HEADER_SIZE);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   176
 }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   177
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   178
-
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   179
 bool Gis_multi_point::init_from_wkt(Gis_read_stream *trs, String *wkb)
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   180
 {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   181
   uint32 n_points= 0;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   182
@@ -1085,24 +1107,26 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   183
   return proper_size;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   184
 }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   185
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   186
-
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   187
 bool Gis_multi_point::get_data_as_wkt(String *txt, const char **end) const
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   188
 {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   189
   uint32 n_points;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   190
-  if (no_data(m_data, 4))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   191
+  const char *data= m_data;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   192
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   193
+  if (no_data(data, 4))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   194
     return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   195
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   196
-  n_points= uint4korr(m_data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   197
-  if (no_data(m_data+4,
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   198
-	      n_points * (SIZEOF_STORED_DOUBLE * 2 + WKB_HEADER_SIZE)) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   199
+  n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   200
+  data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   201
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   202
+  if (not_enough_points(data, n_points, WKB_HEADER_SIZE) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   203
       txt->reserve(((MAX_DIGITS_IN_DOUBLE + 1) * 2 + 1) * n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   204
     return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   205
-  *end= append_points(txt, n_points, m_data+4, WKB_HEADER_SIZE);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   206
-  txt->length(txt->length()-1);			// Remove end ','
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   207
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   208
+  *end= append_points(txt, n_points, data, WKB_HEADER_SIZE);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   209
+  txt->length(txt->length()-1);                 // Remove end ','
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   210
   return 0;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   211
 }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   212
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   213
-
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   214
 bool Gis_multi_point::get_mbr(MBR *mbr, const char **end) const
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   215
 {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   216
   return (*end= get_mbr_for_points(mbr, m_data, WKB_HEADER_SIZE)) == 0;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   217
@@ -1155,11 +1179,20 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   218
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   219
   while (n_line_strings--)
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   220
   {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   221
+    size_t n_points;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   222
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   223
     if (no_data(data, WKB_HEADER_SIZE + 4))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   224
       return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   225
-    data+= (WKB_HEADER_SIZE + 4 + uint4korr(data + WKB_HEADER_SIZE) *
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   226
-	    POINT_DATA_SIZE);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   227
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   228
+    n_points= uint4korr(data + WKB_HEADER_SIZE);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   229
+    data+= WKB_HEADER_SIZE + 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   230
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   231
+    if (not_enough_points(data, n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   232
+      return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   233
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   234
+    data+= n_points * POINT_DATA_SIZE;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   235
   }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   236
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   237
   return (uint32) (data - m_data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   238
 }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   239
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   240
@@ -1251,7 +1284,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   241
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   242
     n_points= uint4korr(data + WKB_HEADER_SIZE);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   243
     data+= WKB_HEADER_SIZE + 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   244
-    if (no_data(data, n_points * (SIZEOF_STORED_DOUBLE*2)) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   245
+    if (not_enough_points(data, n_points) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   246
 	txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1) * 2 + 1) * n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   247
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   248
     txt->qs_append('(');
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   249
@@ -1312,7 +1345,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   250
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   251
     n_points= uint4korr(data + WKB_HEADER_SIZE);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   252
     length= WKB_HEADER_SIZE + 4+ POINT_DATA_SIZE * n_points;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   253
-    if (no_data(data, length))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   254
+    if (not_enough_points(data + WKB_HEADER_SIZE + 4, n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   255
       return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   256
     if (!--num)
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   257
       break;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   258
@@ -1410,9 +1443,16 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   259
 
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   260
     while (n_linear_rings--)
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   261
     {
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   262
+      size_t n_points;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   263
       if (no_data(data, 4))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   264
-	return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   265
-      data+= 4 + uint4korr(data) * POINT_DATA_SIZE;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   266
+        return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   267
+      n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   268
+      data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   269
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   270
+      if (not_enough_points(data, n_points))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   271
+        return GET_SIZE_ERROR;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   272
+
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   273
+      data+= n_points * POINT_DATA_SIZE;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   274
     }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   275
   }
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   276
   return (uint32) (data - m_data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   277
@@ -1512,7 +1552,7 @@
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   278
         return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   279
       uint32 n_points= uint4korr(data);
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   280
       data+= 4;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   281
-      if (no_data(data, (SIZEOF_STORED_DOUBLE * 2) * n_points) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   282
+      if (not_enough_points(data, n_points) ||
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   283
 	  txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1) * 2 + 1) * n_points,
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   284
 		       512))
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   285
 	return 1;
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   286
70e041ba5b04 15688738 problem in database/mysql
Ramesh Maddali<ramesh.maddali@oracle.com>
parents:
diff changeset
   287
=== modified file 'sql/spatial.h'