Я пытаюсь найти дыры в безопасности в этом коде C для очереди - PullRequest
0 голосов
/ 06 февраля 2012

Я знаю, что в части malloc есть что-то подозрительное, но мне сложно понять, что в этом опасного:

//que structure
typedef struct queue{
         int *que;  // the actual array of queue elements
         int head;   // the head index in que of the queue
         int count;  /// number of elements in queue
         int size; // max number of elements in queue
    } QUEUE;


void qManage(QUEUE **qptr, int flag, int size){
      if(flag){
              /* allocate a new queue */
              *qptr = malloc(sizeof(QUEUE));
              (*qptr)->head = (*qptr)->count = 0;
              (*qptr)->que = malloc(size * sizeof(int));
              (*qptr)->size = size;
    }
    else{
             /* delete the current queue */
             (void) free((*qptr)->que);
             (void) free(*qptr);
    }
}

1 Ответ

2 голосов
/ 06 февраля 2012

Я уверен, что проблема в следующем: What happens if you pass a negative value for 'size'?

Другая возможная проблема заключается в том, что вы не проверяете *qptr для NULL после выделения, однако, редко это будет проблемой в реальном коде, если это когда-либо произойдет, у вас есть другие ошибки, о которых нужно беспокоиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...