[Groonga-commit] groonga/groonga [master] add max latitude and longitude value checks.

Back to archive index

null+****@clear***** null+****@clear*****
2011年 3月 9日 (水) 16:34:34 JST


Kouhei Sutou	2011-03-09 07:34:34 +0000 (Wed, 09 Mar 2011)

  New Revision: 4d53c4a3a743d3081b76fdcdece447bea2238f8c

  Log:
    add max latitude and longitude value checks.

  Modified files:
    lib/geo.c
    test/unit/story/test-taiyaki.c

  Modified: lib/geo.c (+20 -0)
===================================================================
--- lib/geo.c    2011-03-09 07:31:07 +0000 (2168911)
+++ lib/geo.c    2011-03-09 07:34:34 +0000 (6455d29)
@@ -715,6 +715,26 @@ grn_geo_search_in_rectangle(grn_ctx *ctx, grn_obj *obj, grn_obj **args, int narg
       goto exit;
     }
 
+    if (geo_point2->latitude >= GRN_GEO_MAX_LATITUDE) {
+      ERR(GRN_INVALID_ARGUMENT,
+          "geo_in_rectangle(): geo point2's latitude is too big: <%d>(max:%d): "
+          "(%d,%d) (%d,%d)",
+          GRN_GEO_MAX_LATITUDE, geo_point2->latitude,
+          geo_point1->latitude, geo_point1->longitude,
+          geo_point2->latitude, geo_point2->longitude);
+      goto exit;
+    }
+
+    if (geo_point2->longitude >= GRN_GEO_MAX_LONGITUDE) {
+      ERR(GRN_INVALID_ARGUMENT,
+          "geo_in_rectangle(): geo point2's longitude is too big: <%d>(max:%d): "
+          "(%d,%d) (%d,%d)",
+          GRN_GEO_MAX_LONGITUDE, geo_point2->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 (+34 -0)
===================================================================
--- test/unit/story/test-taiyaki.c    2011-03-09 07:31:07 +0000 (0b93e1e)
+++ test/unit/story/test-taiyaki.c    2011-03-09 07:34:34 +0000 (2d0e95f)
@@ -27,6 +27,8 @@ 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_in_rectangle_over_latitude2(void);
+void test_in_rectangle_over_longitude2(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);
@@ -239,6 +241,38 @@ test_in_rectangle_over_longitude1(void)
 }
 
 void
+test_in_rectangle_over_latitude2(void)
+{
+  grn_test_assert_send_command_error(
+    context,
+    GRN_INVALID_ARGUMENT,
+    "geo_in_rectangle(): geo point2's latitude is too big: "
+    "<1296000000>(max:1296000000): "
+    "(131281920,505723679) (1296000000,505954080",
+    "select Shops "
+    "--sortby '+name' "
+    "--output_columns 'name, location' "
+    "--filter "
+    "'geo_in_rectangle(location, \"35.73360x139.7394\", \"360.0x139.7714\")'");
+}
+
+void
+test_in_rectangle_over_longitude2(void)
+{
+  grn_test_assert_send_command_error(
+    context,
+    GRN_INVALID_ARGUMENT,
+    "geo_in_rectangle(): geo point2's longitude is too big: "
+    "<648000000>(max:648000000): "
+    "(131281920,505723679) (130508208,648000000)",
+    "select Shops "
+    "--sortby '+name' "
+    "--output_columns 'name, location' "
+    "--filter "
+    "'geo_in_rectangle(location, \"35.73360x139.7394\", \"35.62614x180.0\")'");
+}
+
+void
 test_sort(void)
 {
   gdouble yurakucho_latitude = 35.67487;




Groonga-commit メーリングリストの案内
Back to archive index