Index: apps/app_voicemail.c =================================================================== --- apps/app_voicemail.c (revision 402349) +++ apps/app_voicemail.c (working copy) @@ -3736,14 +3736,18 @@ } /* Read out in small chunks */ for (offset = 0; offset < colsize2; offset += CHUNKSIZE) { - if ((fdm = mmap(NULL, CHUNKSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset)) == MAP_FAILED) { + unsigned chunksize = CHUNKSIZE; + if (offset + chunksize > fdlen) { + chunksize = fdlen - offset; + } + if ((fdm = mmap(NULL, chunksize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset)) == MAP_FAILED) { ast_log(AST_LOG_WARNING, "Could not mmap the output file: %s (%d)\n", strerror(errno), errno); SQLFreeHandle(SQL_HANDLE_STMT, stmt); ast_odbc_release_obj(obj); goto yuck; } else { - res = SQLGetData(stmt, x + 1, SQL_BINARY, fdm, CHUNKSIZE, NULL); - munmap(fdm, CHUNKSIZE); + res = SQLGetData(stmt, x + 1, SQL_BINARY, fdm, chunksize, NULL); + munmap(fdm, chunksize); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { ast_log(AST_LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql); unlink(full_fn);