Index: main/manager.c =================================================================== --- main/manager.c (revision 206378) +++ main/manager.c (working copy) @@ -2885,13 +2885,17 @@ if (MAP_FAILED == (buf = mmap(NULL, l, PROT_READ | PROT_WRITE, MAP_PRIVATE, ss.fd, 0))) { ast_log(LOG_WARNING, "mmap failed. Manager request output was not processed\n"); } else { + /* ensure that string is null-terminated */ + char *newbuf = ast_malloc(l + 1); + memcpy(newbuf, buf, l); + newbuf[l] = '\0'; char *tmpbuf; if (format == FORMAT_XML) - tmpbuf = xml_translate(buf, params); + tmpbuf = xml_translate(newbuf, params); else if (format == FORMAT_HTML) - tmpbuf = html_translate(buf); + tmpbuf = html_translate(newbuf); else - tmpbuf = buf; + tmpbuf = newbuf; if (tmpbuf) { size_t wlen, tlen; if ((retval = malloc((wlen = strlen(workspace)) + (tlen = strlen(tmpbuf)) + 128))) { @@ -2902,11 +2906,12 @@ len = 120; } } - if (tmpbuf != buf) + if (tmpbuf != newbuf) free(tmpbuf); free(s->outputstr); s->outputstr = NULL; munmap(buf, l); + free(newbuf); } } fclose(ss.f);