aboutsummaryrefslogtreecommitdiff
path: root/src/log.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-04-23 18:06:37 +0200
committerGitHub <noreply@github.com>2021-04-23 18:06:37 +0200
commit57102f42c6ea8d8b0a787c7ecea21ed4fe3a02cb (patch)
tree970330ce1a2a99b062503c90ebfe585cc4003dd6 /src/log.cpp
parent2733271888c2462a77d4c48485ad0cdefa6cfb82 (diff)
parentc221134bc39e8a929f273b5ffff606afe14a9b77 (diff)
downloadPROJ-57102f42c6ea8d8b0a787c7ecea21ed4fe3a02cb.tar.gz
PROJ-57102f42c6ea8d8b0a787c7ecea21ed4fe3a02cb.zip
Merge pull request #2687 from rouault/pj_vlog_buffer_overflow
pj_vlog(): fix buffer overflow in case of super lengthy error message
Diffstat (limited to 'src/log.cpp')
-rw-r--r--src/log.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/log.cpp b/src/log.cpp
index c50b0ebc..6bad34d4 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -49,7 +49,7 @@ void pj_stderr_logger( void *app_data, int level, const char *msg )
/* pj_vlog() */
/************************************************************************/
void pj_vlog( PJ_CONTEXT *ctx, int level, const char *fmt, va_list args );
-/* Workhorse for the log functions - relates to pj_log as vsprintf relates to sprintf */
+
void pj_vlog( PJ_CONTEXT *ctx, int level, const char *fmt, va_list args )
{
@@ -67,12 +67,13 @@ void pj_vlog( PJ_CONTEXT *ctx, int level, const char *fmt, va_list args )
if( level > debug_level )
return;
- msg_buf = (char *) malloc(100000);
+ constexpr size_t BUF_SIZE = 100000;
+ msg_buf = (char *) malloc(BUF_SIZE);
if( msg_buf == nullptr )
return;
- /* we should use vsnprintf where available once we add configure detect.*/
- vsprintf( msg_buf, fmt, args );
+ vsnprintf( msg_buf, BUF_SIZE, fmt, args );
+ msg_buf[BUF_SIZE-1] = '\0';
ctx->logger( ctx->logger_app_data, level, msg_buf );