From: Junkyeong Kim Date: Mon, 17 Apr 2017 08:43:42 +0000 (+0900) Subject: change sscanf to strtol for getting fd X-Git-Tag: accepted/tizen/3.0/common/20170508.153030~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F54%2F125454%2F1;p=platform%2Fcore%2Fuifw%2Flibtdm.git change sscanf to strtol for getting fd Change-Id: I7fed3efbd3fc9a9273a670b3b967707453471be2 Signed-off-by: Junkyeong Kim --- diff --git a/src/tdm_helper.c b/src/tdm_helper.c index 6b4178e..4adbcb8 100644 --- a/src/tdm_helper.c +++ b/src/tdm_helper.c @@ -521,15 +521,35 @@ tdm_helper_get_fd(const char *env) { const char *value; int fd, newfd, flags, ret; + char *end; + errno = 0; value = (const char*)getenv(env); if (!value) return -1; - ret = sscanf(value, "%d", &fd); - if (ret < 0) { - TDM_ERR("sscanf failed: %m"); + const long sl = strtol(value, &end, 10); + if (end == value) { + TDM_ERR("%s: not a decimal number\n", value); return -1; + } else if (*end != '\0') { + TDM_ERR("%s: extra characters at end of input: %s\n", value, end); + return -1; + } else if ((sl == LONG_MIN || sl == LONG_MAX) && errno == ERANGE) { + TDM_ERR("%s out of range of type long\n", value); + return -1; + } else if (sl > INT_MAX) { + TDM_ERR("%ld greater than INT_MAX\n", sl); + return -1; + } else if (sl < INT_MIN) { + TDM_ERR("%ld less than INT_MIN\n", sl); + return -1; + } else { + fd = (int)sl; + if (fd < 0) { + TDM_ERR("%d out of fd range\n", fd); + return -1; + } } flags = fcntl(fd, F_GETFD);