зеркало из https://github.com/github/ruby.git
string.c: for small crypt_data
* string.c (rb_str_crypt): struct crypt_data defined in missing/crypt.h is small enough. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58866 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
9e1624cfe8
Коммит
92261511b6
|
@ -237,6 +237,8 @@ struct crypt_data {
|
|||
char cryptresult[1+4+4+11+1]; /* encrypted result */
|
||||
};
|
||||
|
||||
#define SIZEOF_CRYPT_DATA (KS_SIZE*8+(1+4+4+11+1))
|
||||
|
||||
char *crypt(const char *key, const char *setting);
|
||||
void setkey(const char *key);
|
||||
void encrypt(char *block, int flag);
|
||||
|
|
10
string.c
10
string.c
|
@ -8722,8 +8722,14 @@ rb_str_oct(VALUE str)
|
|||
static VALUE
|
||||
rb_str_crypt(VALUE str, VALUE salt)
|
||||
{
|
||||
#undef LARGE_CRYPT_DATA
|
||||
#ifdef HAVE_CRYPT_R
|
||||
# if defined SIZEOF_CRYPT_DATA && SIZEOF_CRYPT_DATA <= 256
|
||||
struct crypt_data cdata, *const data = &cdata;
|
||||
# else
|
||||
# undef LARGE_CRYPT_DATA
|
||||
struct crypt_data *data = ALLOC(struct crypt_data);
|
||||
# endif
|
||||
#else
|
||||
extern char *crypt(const char *, const char *);
|
||||
#endif
|
||||
|
@ -8762,7 +8768,7 @@ rb_str_crypt(VALUE str, VALUE salt)
|
|||
res = crypt(s, saltp);
|
||||
#endif
|
||||
if (!res) {
|
||||
#ifdef HAVE_CRYPT_R
|
||||
#ifdef LARGE_CRYPT_DATA
|
||||
int err = errno;
|
||||
xfree(data);
|
||||
errno = err;
|
||||
|
@ -8770,7 +8776,7 @@ rb_str_crypt(VALUE str, VALUE salt)
|
|||
rb_sys_fail("crypt");
|
||||
}
|
||||
result = rb_str_new_cstr(res);
|
||||
#ifdef HAVE_CRYPT_R
|
||||
#ifdef LARGE_CRYPT_DATA
|
||||
xfree(data);
|
||||
#endif
|
||||
FL_SET_RAW(result, OBJ_TAINTED_RAW(str) | OBJ_TAINTED_RAW(salt));
|
||||
|
|
Загрузка…
Ссылка в новой задаче