Fix some code that was supposed to ensure that a buffer was terminated, but was

writing to the wrong byte.  Also, remove some non-thread safe test code.

(closes issue #11317)
Reported by: IgorG
Patches:
      unistim-2.patch uploaded by IgorG (license 20)
	  - additional changes by me


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89484 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.0
Russell Bryant 18 years ago
parent 29ad24e37a
commit 6d8d66e9e7

@ -223,8 +223,6 @@ static struct sockaddr_in addr_from;
static unsigned int size_addr_from = sizeof(addr_from); static unsigned int size_addr_from = sizeof(addr_from);
/*! Receive buffer address */ /*! Receive buffer address */
static unsigned char *buff; static unsigned char *buff;
/*! Used for test */
static unsigned char flag = 0;
static int unistim_reloading = 0; static int unistim_reloading = 0;
AST_MUTEX_DEFINE_STATIC(unistim_reload_lock); AST_MUTEX_DEFINE_STATIC(unistim_reload_lock);
AST_MUTEX_DEFINE_STATIC(usecnt_lock); AST_MUTEX_DEFINE_STATIC(usecnt_lock);
@ -1383,22 +1381,6 @@ static void send_texttitle(struct unistimsession *pte, const char *text)
} }
static void SendTest(struct unistimsession *pte)
{
char text[TEXT_LENGTH_MAX];
int i;
if (unistimdebug)
ast_verbose("Sending test packet %x\n", flag);
sprintf(text, "first/last char0x%x/0x%x", flag, flag + TEXT_LENGTH_MAX - 1);
send_text(TEXT_LINE1, TEXT_NORMAL, pte, text);
for (i = 0; i < TEXT_LENGTH_MAX; i++) {
text[i] = flag++;
}
text[i] = '\0';
send_text(TEXT_LINE0, TEXT_NORMAL, pte, text);
}
static void send_date_time(struct unistimsession *pte) static void send_date_time(struct unistimsession *pte)
{ {
BUFFSEND; BUFFSEND;
@ -3033,14 +3015,14 @@ static void show_entry_history(struct unistimsession *pte, FILE ** f)
fclose(*f); fclose(*f);
return; return;
} }
line[TEXT_LENGTH_MAX + 1] = 0; line[sizeof(line) - 1] = '\0';
send_text(TEXT_LINE0, TEXT_NORMAL, pte, line); send_text(TEXT_LINE0, TEXT_NORMAL, pte, line);
if (fread(line, TEXT_LENGTH_MAX, 1, *f) != 1) { if (fread(line, TEXT_LENGTH_MAX, 1, *f) != 1) {
display_last_error("Can't read callerid entry"); display_last_error("Can't read callerid entry");
fclose(*f); fclose(*f);
return; return;
} }
line[TEXT_LENGTH_MAX + 1] = 0; line[sizeof(line) - 1] = '\0';
ast_copy_string(pte->device->lst_cid, line, sizeof(pte->device->lst_cid)); ast_copy_string(pte->device->lst_cid, line, sizeof(pte->device->lst_cid));
send_text(TEXT_LINE1, TEXT_NORMAL, pte, line); send_text(TEXT_LINE1, TEXT_NORMAL, pte, line);
if (fread(line, TEXT_LENGTH_MAX, 1, *f) != 1) { if (fread(line, TEXT_LENGTH_MAX, 1, *f) != 1) {
@ -3048,7 +3030,7 @@ static void show_entry_history(struct unistimsession *pte, FILE ** f)
fclose(*f); fclose(*f);
return; return;
} }
line[TEXT_LENGTH_MAX + 1] = 0; line[sizeof(line) - 1] = '\0';
send_text(TEXT_LINE2, TEXT_NORMAL, pte, line); send_text(TEXT_LINE2, TEXT_NORMAL, pte, line);
fclose(*f); fclose(*f);
@ -3427,12 +3409,7 @@ static void process_request(int size, unsigned char *buf, struct unistimsession
if (unistimdebug) if (unistimdebug)
ast_verbose("Key pressed : keycode = 0x%.2x - current state : %d\n", keycode, ast_verbose("Key pressed : keycode = 0x%.2x - current state : %d\n", keycode,
pte->state); pte->state);
/* test key */
if (keycode == KEY_COMPUTR) {
SendTest(pte);
return;
}
/* End of the test section */
switch (pte->state) { switch (pte->state) {
case STATE_INIT: case STATE_INIT:
if (unistimdebug) if (unistimdebug)
@ -4413,16 +4390,16 @@ static int unistim_sendtext(struct ast_channel *ast, const char *text)
return 0; return 0;
} }
memcpy(tmp, text + TEXT_LENGTH_MAX, TEXT_LENGTH_MAX); memcpy(tmp, text + TEXT_LENGTH_MAX, TEXT_LENGTH_MAX);
tmp[TEXT_LENGTH_MAX + 1] = '\0'; tmp[sizeof(tmp) - 1] = '\0';
send_text(TEXT_LINE2, TEXT_NORMAL, pte, tmp); send_text(TEXT_LINE2, TEXT_NORMAL, pte, tmp);
return 0; return 0;
} }
send_text(TEXT_LINE0, TEXT_NORMAL, pte, text); send_text(TEXT_LINE0, TEXT_NORMAL, pte, text);
memcpy(tmp, text + TEXT_LENGTH_MAX, TEXT_LENGTH_MAX); memcpy(tmp, text + TEXT_LENGTH_MAX, TEXT_LENGTH_MAX);
tmp[TEXT_LENGTH_MAX + 1] = '\0'; tmp[sizeof(tmp) - 1] = '\0';
send_text(TEXT_LINE1, TEXT_NORMAL, pte, tmp); send_text(TEXT_LINE1, TEXT_NORMAL, pte, tmp);
memcpy(tmp, text + TEXT_LENGTH_MAX * 2, TEXT_LENGTH_MAX); memcpy(tmp, text + TEXT_LENGTH_MAX * 2, TEXT_LENGTH_MAX);
tmp[TEXT_LENGTH_MAX + 1] = '\0'; tmp[sizeof(tmp) - 1] = '\0';
send_text(TEXT_LINE2, TEXT_NORMAL, pte, tmp); send_text(TEXT_LINE2, TEXT_NORMAL, pte, tmp);
return 0; return 0;
} }

Loading…
Cancel
Save