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