avutil/opencl: check strtol for failure
authorhighgod0401 <highgod0401@gmail.com>
Thu, 4 Apr 2013 12:11:51 +0000 (20:11 +0800)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 4 Apr 2013 17:26:16 +0000 (19:26 +0200)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavutil/opencl.c

index e618829..0bf7a82 100644 (file)
@@ -518,6 +518,7 @@ int av_opencl_init(AVDictionary *options, AVOpenCLExternalEnv *ext_opencl_env)
     AVDictionaryEntry *opt_build_entry;
     AVDictionaryEntry *opt_platform_entry;
     AVDictionaryEntry *opt_device_entry;
+    char *pos;
     LOCK_OPENCL
     if (!gpu_env.init_count) {
         opt_platform_entry = av_dict_get(options, "platform_idx", NULL, 0);
@@ -526,10 +527,20 @@ int av_opencl_init(AVDictionary *options, AVOpenCLExternalEnv *ext_opencl_env)
         gpu_env.usr_spec_dev_info.platform_idx = -1;
         gpu_env.usr_spec_dev_info.dev_idx = -1;
         if (opt_platform_entry) {
-            gpu_env.usr_spec_dev_info.platform_idx = strtol(opt_platform_entry->value, NULL, 10);
+            gpu_env.usr_spec_dev_info.platform_idx = strtol(opt_platform_entry->value, &pos, 10);
+            if (pos == opt_platform_entry->value) {
+                av_log(&openclutils, AV_LOG_ERROR, "Platform index should be a number\n");
+                ret = AVERROR(EINVAL);
+                goto end;
+            }
         }
         if (opt_device_entry) {
-            gpu_env.usr_spec_dev_info.dev_idx = strtol(opt_device_entry->value, NULL, 10);
+            gpu_env.usr_spec_dev_info.dev_idx = strtol(opt_device_entry->value, &pos, 10);
+            if (pos == opt_platform_entry->value) {
+                av_log(&openclutils, AV_LOG_ERROR, "Device index should be a number\n");
+                ret = AVERROR(EINVAL);
+                goto end;
+            }
         }
         ret = init_opencl_env(&gpu_env, ext_opencl_env);
         if (ret < 0)