diff options
author | Bartlomiej Grzelewski <b.grzelewski@samsung.com> | 2017-06-12 12:14:19 +0200 |
---|---|---|
committer | jin-gyu.kim <jin-gyu.kim@samsung.com> | 2017-08-01 12:20:55 +0900 |
commit | 537e6f40b94300d0cfa961c68069ce1cb8b790d6 (patch) | |
tree | 96d9a542fe76323af08eebc5c2855828037ac48c | |
parent | 6357ba7161cab3c0260868cd1144208450a12b64 (diff) | |
download | security-manager-accepted/tizen_3.0_ivi.tar.gz security-manager-accepted/tizen_3.0_ivi.tar.bz2 security-manager-accepted/tizen_3.0_ivi.zip |
Fix memory allocation loopsubmit/tizen_3.0/20170810.013126submit/tizen_3.0/20170801.044417accepted/tizen/3.0/wearable/20170810.094223accepted/tizen/3.0/mobile/20170810.094208accepted/tizen/3.0/ivi/20170810.094219accepted/tizen/3.0/common/20170810.115355accepted/tizen_3.0_iviaccepted/tizen_3.0_common
Old implementation always exit loop after buffer resize without
any try to input data once again.
-rw-r--r-- | src/nss/nss_securitymanager.cpp | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/nss/nss_securitymanager.cpp b/src/nss/nss_securitymanager.cpp index 2a975e69..4c7eef3f 100644 --- a/src/nss/nss_securitymanager.cpp +++ b/src/nss/nss_securitymanager.cpp @@ -88,13 +88,11 @@ enum nss_status _nss_securitymanager_initgroups_dyn(const char *user, gid_t grou passwd pwnambuffer; passwd *pwnam = NULL; - do { - ret = TEMP_FAILURE_RETRY(getpwnam_r(user, &pwnambuffer, buffer.data(), buffer.size(), &pwnam)); - if (ret == ERANGE && buffer.size() < MEMORY_LIMIT) { - buffer.resize(buffer.size() << 1); - continue; - } - } while (0); + while (ERANGE == (ret = TEMP_FAILURE_RETRY(getpwnam_r(user, &pwnambuffer, buffer.data(), buffer.size(), &pwnam))) + && buffer.size() < MEMORY_LIMIT) + { + buffer.resize(buffer.size() << 1); + } if (ret == ERANGE) { *errnop = ENOMEM; |