Browse Source

fix a buffer issue

pull/399/head
Max Lv 9 years ago
parent
commit
de8041b618
2 changed files with 5 additions and 5 deletions
  1. 8
      src/encrypt.c
  2. 2
      src/server.h

8
src/encrypt.c

@ -1514,13 +1514,13 @@ int ss_check_crc(char *buf, ssize_t *buf_len, char *crc_buf, ssize_t *crc_idx)
ssize_t cidx = *crc_idx; ssize_t cidx = *crc_idx;
for (i = 0, j = 0; i < blen; i++) { for (i = 0, j = 0; i < blen; i++) {
crc_buf[cidx] = buf[i];
cidx++;
if (cidx < CRC_BUF_LEN) { if (cidx < CRC_BUF_LEN) {
buf[j] = buf[i]; buf[j] = buf[i];
j++; j++;
} }
if (cidx == CRC_BUF_LEN + 1) {
crc_buf[cidx] = buf[i];
cidx++;
if (cidx == CRC_BUF_LEN + 2) {
uint16_t c = crc16((const void*)crc_buf, CRC_BUF_LEN); uint16_t c = crc16((const void*)crc_buf, CRC_BUF_LEN);
c = htons(c); c = htons(c);
if (memcmp(&c, crc_buf + CRC_BUF_LEN, 2) != 0) return 0; if (memcmp(&c, crc_buf + CRC_BUF_LEN, 2) != 0) return 0;
@ -1548,7 +1548,7 @@ char *ss_gen_crc(char *buf, ssize_t *buf_len, char *crc_buf, ssize_t *crc_idx, i
c = htons(c); c = htons(c);
memmove(buf + j + 2, buf + j, blen - i); memmove(buf + j + 2, buf + j, blen - i);
memcpy(buf + j, &c, 2); memcpy(buf + j, &c, 2);
j++; cidx = 0;
j += 2; cidx = 0;
} }
crc_buf[cidx] = buf[j]; crc_buf[cidx] = buf[j];
cidx++; cidx++;

2
src/server.h

@ -58,7 +58,7 @@ struct server {
int auth; int auth;
ssize_t crc_idx; ssize_t crc_idx;
char crc_buf[CRC_BUF_LEN];
char crc_buf[CRC_BUF_LEN + 2]; // 2 bytes for CRC16
struct enc_ctx *e_ctx; struct enc_ctx *e_ctx;
struct enc_ctx *d_ctx; struct enc_ctx *d_ctx;

Loading…
Cancel
Save