]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 278024 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Tue, 20 Jul 2010 16:54:20 +0000 (16:54 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Tue, 20 Jul 2010 16:54:20 +0000 (16:54 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r278024 | tilghman | 2010-07-20 11:50:11 -0500 (Tue, 20 Jul 2010) | 14 lines

  Merged revisions 278023 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r278023 | tilghman | 2010-07-20 11:37:18 -0500 (Tue, 20 Jul 2010) | 7 lines

    Off-by-one error

    (closes issue #16506)
     Reported by: nik600
     Patches:
           20100629__issue16506.diff.txt uploaded by tilghman (license 14)
  ........
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@278025 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/manager.c

index a5b1b1938e59891ad103cf346667e7ce8235e7ae..d13672653be8cb25934554a23e1d55cf7133cc9b 100644 (file)
@@ -3983,17 +3983,18 @@ static struct ast_str *generic_http_callback(enum output_format format,
        if (s.f != NULL) {      /* have temporary output */
                char *buf;
                size_t l;
-               
-               /* Ensure buffer is NULL-terminated */
-               fprintf(s.f, "%c", 0);
 
                if ((l = ftell(s.f))) {
-                       if ((buf = mmap(NULL, l, PROT_READ | PROT_WRITE, MAP_SHARED, s.fd, 0))) {
-                               if (format == FORMAT_XML || format == FORMAT_HTML)
+                       if (MAP_FAILED == (buf = mmap(NULL, l + 1, PROT_READ | PROT_WRITE, MAP_PRIVATE, s.fd, 0))) {
+                               ast_log(LOG_WARNING, "mmap failed.  Manager output was not processed\n");
+                       } else {
+                               buf[l] = '\0';
+                               if (format == FORMAT_XML || format == FORMAT_HTML) {
                                        xml_translate(&out, buf, params, format);
-                               else
+                               } else {
                                        ast_str_append(&out, 0, "%s", buf);
-                               munmap(buf, l);
+                               }
+                               munmap(buf, l + 1);
                        }
                } else if (format == FORMAT_XML || format == FORMAT_HTML) {
                        xml_translate(&out, "", params, format);