mirror of
https://github.com/bjc/prosody.git
synced 2025-04-03 21:27:38 +03:00
util.crand: Only keep return value of getrandom() as the others don't return partial results
This commit is contained in:
parent
991280175b
commit
ebeea12c82
1 changed files with 6 additions and 14 deletions
|
@ -59,8 +59,7 @@ int getrandom(void *buf, size_t buflen, unsigned int flags) {
|
|||
#endif
|
||||
|
||||
int Lrandom(lua_State *L) {
|
||||
int ret = 0;
|
||||
size_t len = (size_t)luaL_checkinteger(L, 1);
|
||||
const size_t len = (size_t)luaL_checkinteger(L, 1);
|
||||
void *buf = lua_newuserdata(L, len);
|
||||
|
||||
#if defined(WITH_GETRANDOM)
|
||||
|
@ -69,25 +68,22 @@ int Lrandom(lua_State *L) {
|
|||
* *does* block if the entropy pool is not yet initialized.
|
||||
*/
|
||||
int left = len;
|
||||
char *b = buf;
|
||||
char *p = buf;
|
||||
|
||||
do {
|
||||
ret = getrandom(b, left, 0);
|
||||
int ret = getrandom(p, left, 0);
|
||||
|
||||
if(ret < 0) {
|
||||
lua_pushstring(L, strerror(errno));
|
||||
return lua_error(L);
|
||||
}
|
||||
|
||||
b += ret;
|
||||
p += ret;
|
||||
left -= ret;
|
||||
} while(left > 0);
|
||||
|
||||
ret = len;
|
||||
|
||||
#elif defined(WITH_ARC4RANDOM)
|
||||
arc4random_buf(buf, len);
|
||||
ret = len;
|
||||
#elif defined(WITH_OPENSSL)
|
||||
|
||||
if(!RAND_status()) {
|
||||
|
@ -95,11 +91,7 @@ int Lrandom(lua_State *L) {
|
|||
return lua_error(L);
|
||||
}
|
||||
|
||||
ret = RAND_bytes(buf, len);
|
||||
|
||||
if(ret == 1) {
|
||||
ret = len;
|
||||
} else {
|
||||
if(RAND_bytes(buf, len) != 1) {
|
||||
/* TODO ERR_get_error() */
|
||||
lua_pushstring(L, "RAND_bytes() failed");
|
||||
return lua_error(L);
|
||||
|
@ -107,7 +99,7 @@ int Lrandom(lua_State *L) {
|
|||
|
||||
#endif
|
||||
|
||||
lua_pushlstring(L, buf, ret);
|
||||
lua_pushlstring(L, buf, len);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue