null+****@clear*****
null+****@clear*****
2011年 3月 9日 (水) 16:31:07 JST
Kouhei Sutou 2011-03-09 07:31:07 +0000 (Wed, 09 Mar 2011)
New Revision: 7ae2909da6edab979a0c11197bed3ccb3a1d9e56
Log:
add a max longitude value check.
Modified files:
lib/geo.c
test/unit/story/test-taiyaki.c
Modified: lib/geo.c (+10 -0)
===================================================================
--- lib/geo.c 2011-03-09 07:01:35 +0000 (c83f2fd)
+++ lib/geo.c 2011-03-09 07:31:07 +0000 (2168911)
@@ -705,6 +705,16 @@ grn_geo_search_in_rectangle(grn_ctx *ctx, grn_obj *obj, grn_obj **args, int narg
goto exit;
}
+ if (geo_point1->longitude >= GRN_GEO_MAX_LONGITUDE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "geo_in_rectangle(): geo point1's longitude is too big: <%d>(max:%d): "
+ "(%d,%d) (%d,%d)",
+ GRN_GEO_MAX_LONGITUDE, geo_point1->longitude,
+ geo_point1->latitude, geo_point1->longitude,
+ geo_point2->latitude, geo_point2->longitude);
+ goto exit;
+ }
+
latitude_distance = geo_point1->latitude - geo_point2->latitude;
longitude_distance = geo_point2->longitude - geo_point1->longitude;
if (latitude_distance > longitude_distance) {
Modified: test/unit/story/test-taiyaki.c (+18 -1)
===================================================================
--- test/unit/story/test-taiyaki.c 2011-03-09 07:01:35 +0000 (9c81cc6)
+++ test/unit/story/test-taiyaki.c 2011-03-09 07:31:07 +0000 (0b93e1e)
@@ -26,6 +26,7 @@ void test_in_rectangle_long_latitude(void);
void test_in_rectangle_long_longitude(void);
void test_in_rectangle_over_border(void);
void test_in_rectangle_over_latitude1(void);
+void test_in_rectangle_over_longitude1(void);
void test_sort(void);
void test_filter_by_tag_and_sort_by_distance_from_tokyo_tocho(void);
void test_in_circle_and_tag(void);
@@ -210,7 +211,7 @@ test_in_rectangle_over_latitude1(void)
{
grn_test_assert_send_command_error(
context,
- GRN_FUNCTION_NOT_IMPLEMENTED,
+ GRN_INVALID_ARGUMENT,
"geo_in_rectangle(): geo point1's latitude is too big: "
"<1296000000>(max:1296000000): "
"(1296000000,505723679) (130508208,505954080",
@@ -222,6 +223,22 @@ test_in_rectangle_over_latitude1(void)
}
void
+test_in_rectangle_over_longitude1(void)
+{
+ grn_test_assert_send_command_error(
+ context,
+ GRN_INVALID_ARGUMENT,
+ "geo_in_rectangle(): geo point1's longitude is too big: "
+ "<648000000>(max:648000000): "
+ "(131281920,648000000) (130508208,505954080)",
+ "select Shops "
+ "--sortby '+name' "
+ "--output_columns 'name, location' "
+ "--filter "
+ "'geo_in_rectangle(location, \"35.73360x180.0\", \"35.62614x139.7714\")'");
+}
+
+void
test_sort(void)
{
gdouble yurakucho_latitude = 35.67487;