diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2021-04-23 14:57:22 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2021-04-23 14:57:22 +0200 |
| commit | c221134bc39e8a929f273b5ffff606afe14a9b77 (patch) | |
| tree | b76ef9c82994c193d09d1358a15b403430c03376 /src/log.cpp | |
| parent | 64f5b18c0a590b91b489bb9c76a37bba4632e75b (diff) | |
| download | PROJ-c221134bc39e8a929f273b5ffff606afe14a9b77.tar.gz PROJ-c221134bc39e8a929f273b5ffff606afe14a9b77.zip | |
pj_vlog(): fix buffer overflow in case of super lengthy error message
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=33594
Diffstat (limited to 'src/log.cpp')
| -rw-r--r-- | src/log.cpp | 9 |
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 ); |
