Replace readdir() with readdir_r() and add cv::exception handling 69/148669/2 accepted/tizen/unified/20170912.191641 submit/tizen/20170911.064449
authorTae-Young Chung <ty83.chung@samsung.com>
Fri, 8 Sep 2017 08:54:57 +0000 (17:54 +0900)
committerTae-Young Chung <ty83.chung@samsung.com>
Fri, 8 Sep 2017 09:11:25 +0000 (18:11 +0900)
1. Replace readdir() with readdir_r() because of unguaranteed thread safety of readdir()
2. Add try-catch when cvtcolor is called. If exception might be thrown, *_INVALID_OPERATION
   would be returned. Then, testsuite can handle the error case.

Change-Id: Id6ef3455ff5e5e37be8e91cf1c7af817093e7d48
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
packaging/capi-media-vision.spec
test/testsuites/common/image_helper/src/ImageHelper.cpp
test/testsuites/face/face_test_suite.c
test/testsuites/image/image_test_suite.c

index f3abded56cb043c4c33a1069ba9f679be7910edf..9683593d8a067238649fbfe794a2578f6eae0852 100644 (file)
@@ -1,7 +1,7 @@
 Name:        capi-media-vision
 Summary:     Media Vision library for Tizen Native API
 Version:     0.3.27
-Release:     0
+Release:     1
 Group:       Multimedia/Framework
 License:     Apache-2.0 and BSD-3-Clause
 Source0:     %{name}-%{version}.tar.gz
index 1be08fa050716a6200e9b5bbb46fa1cd76b54809..b72c2e3619ab63e79e39448dba899d9c5b78da2e 100644 (file)
@@ -68,7 +68,11 @@ int ImageHelper::loadImageToBuffer(
        if (!image.data)
                return MEDIA_VISION_ERROR_INVALID_PARAMETER;
 
-       cv::cvtColor(image, image, CV_BGR2RGB);
+       try {
+               cv::cvtColor(image, image, CV_BGR2RGB);
+       } catch (cv::Exception &e) {
+               return MEDIA_VISION_ERROR_INVALID_OPERATION;
+       }
 
        *pBufferSize = image.total() * image.elemSize();
        (*pDataBuffer) = new unsigned char[*pBufferSize];
index 40832b2f02f06aa4d1e56a6dfbb30be9621f5923..74fe5b78a514ccb25217d5b594ec73bbc8696d34 100644 (file)
@@ -1797,7 +1797,9 @@ int process_image_file(
        int frames_counter = 0;
        char (*frames)[FILE_PATH_SIZE] = (char **)malloc(0);
 
-       struct dirent *ent;
+       int ret = 0;
+       struct dirent ent;
+       struct dirent *ent_eof;
        DIR *dir = opendir(track_target_file_name);
 
        if (dir == NULL) {
@@ -1805,22 +1807,19 @@ int process_image_file(
                return MEDIA_VISION_ERROR_INVALID_PATH;
        }
 
-       while ((ent = readdir(dir)) != NULL) {
-               if (ent->d_name[0] == '.' || strlen(ent->d_name) < 4)
+       while ((ret = readdir_r(dir, &ent, &ent_eof)) == 0 && ent_eof != NULL) {
+               if (ent.d_name[0] == '.' || strlen(ent.d_name) < 4)
                        continue;
 
-       if (strcmp(".jpg", ent->d_name + strlen(ent->d_name) - 4) != 0)
+               if (strcmp(".jpg", ent.d_name + strlen(ent.d_name) -4) != 0)
                        continue;
 
-
                frames_counter++;
                frames = (char **) realloc(frames, frames_counter * FILE_PATH_SIZE);
 
-
                snprintf(frames[frames_counter -1], FILE_PATH_SIZE, "%s/%s",
-                       track_target_file_name, ent->d_name);
+                       track_target_file_name, ent.d_name);
        }
-
        closedir(dir);
 
        if (frames_counter <= 0)
index dc5503c75e1b78de9bf3ddeb639af015c89b2eaf..cedc8ea27233bb939e17dab501ca347134eb04e0 100644 (file)
@@ -1234,7 +1234,9 @@ int perform_track_image(mv_image_tracking_model_h target)
        int frames_counter = 0;
        char (*frames)[FILE_PATH_SIZE] = (char **)malloc(0);
 
-       struct dirent *ent;
+       int ret = 0;
+       struct dirent ent;
+       struct dirent *ent_eof;
        DIR *dir = opendir(path_to_image);
 
        if (dir == NULL) {
@@ -1242,19 +1244,18 @@ int perform_track_image(mv_image_tracking_model_h target)
                return MEDIA_VISION_ERROR_INVALID_PATH;
        }
 
-       while ((ent = readdir(dir)) != NULL) {
-               if (ent->d_name[0] == '.' || strlen(ent->d_name) < 4)
+       while ((ret = readdir_r(dir, &ent, &ent_eof)) == 0 && ent_eof != NULL) {
+               if (ent.d_name[0] == '.' || strlen(ent.d_name) < 4)
                        continue;
 
-               if (strcmp(".jpg", ent->d_name + strlen(ent->d_name) -4) != 0)
+               if (strcmp(".jpg", ent.d_name + strlen(ent.d_name) -4) != 0)
                        continue;
 
                frames_counter++;
                frames = (char**)realloc(frames, frames_counter * FILE_PATH_SIZE);
 
-               snprintf(frames[frames_counter -1], FILE_PATH_SIZE, "%s/%s", path_to_image, ent->d_name);
+               snprintf(frames[frames_counter -1], FILE_PATH_SIZE, "%s/%s", path_to_image, ent.d_name);
        }
-
        closedir(dir);
 
        if (frames_counter <= 0)