У меня есть такая структура C:
typedef struct ip_esp_private { /* keep track of things privately */
u_int32_t type;
u_int32_t ivlen;
u_int32_t icvlen;
u_int32_t keylen; /* length of "Encryption key */
u_int32_t akeylen; /*length of authn key */
// u_int32_t key[0]; /* key itself */
// u_int32_t akey[0]; /*authn key itself */
u_int32_t *key; /* as suggested */
u_int32_t *akey; /* as suggested */
} esp_private;
Теперь проблема должна быть очевидна, когда я пытаюсь записать ключ, ключ будет перезаписан.
Я не уверен, как я могу его защитить ???
keylen
и akeylen
обеспечивают длину массива key
и akey
, и вся структура должна быть заполнена ввремя выполнения.
Пожалуйста, предоставьте несколько предложений.
РЕДАКТИРОВАТЬ:
да ... u_int32_t является typedef, так что небеспокоиться об этом
Я изменил массив нулевой длины на указатели, как отредактировано выше. Вот как мне нужно заполнить структуру ..
case 'k': /* Key */
length = stringargument(arg, &temp);
priv->keylen = length;
priv->key=malloc(priv->keylen * sizeof(u_int32_t));
/*as suggested added this step*/
/*as suggested commented this step*/
priv = (esp_private *)realloc(priv,
sizeof(esp_private) + length);
memcpy(priv->key, temp, priv->keylen);
pack->private = priv;
pack->modified |= ESP_MOD_KEY;
break;
case 'K': /* Authentication Key */
length = stringargument(arg, &temp);
priv->akeylen = length;
priv->akey=malloc(priv->akeylen * sizeof(u_int32_t));
/*as suggested added this step*/
/*as suggested commented this step*/
priv = (esp_private *)realloc(priv,
sizeof(esp_private) + length);
memcpy(priv->akey, temp, priv->akeylen);
pack->private = priv;
pack->modified |= ESP_MOD_AKEY;
, но не работает .. возможно, перераспределение не выполняется, пожалуйста, предложите также внести изменения.
РЕДАКТИРОВАТЬ 2:
Даже после комментированияrealloc
как и предполагалось, это не сработало. key
и akey
должны были принимать значения, указанные в командной строке как arg, но они принимают некоторые случайные значения. Здесь все еще что-то не так, что требует внимания.
Пожалуйста, помогите мне, так как весь проект застрял из-за мелкой ошибки в этом маленьком пиКод кода. Нужен скоро ...