<div dir="ltr"><div dir="ltr"><div>From 840e38c23316c9d30bc8d9756355c41b8086d625 Mon Sep 17 00:00:00 2001</div><div>From: Vittorio Giovara <<a href="mailto:vittorio.giovara@gmail.com">vittorio.giovara@gmail.com</a>></div><div>Date: Tue, 15 Oct 2024 17:51:15 +0530</div><div>Subject: [PATCH 1/4] Limit buffer size operation for the sprintf() calls</div><div><br></div><div>---</div><div> source/common/param.cpp             | 242 ++++++++++++++--------------</div><div> source/common/primitives.cpp        |   6 +-</div><div> source/common/threadpool.cpp        |   6 +-</div><div> source/encoder/encoder.cpp          |  26 +--</div><div> source/encoder/ratecontrol.cpp      |   4 +-</div><div> source/encoder/weightPrediction.cpp |  14 +-</div><div> source/test/pixelharness.cpp        |   4 +-</div><div> source/x265cli.cpp                  |   8 +-</div><div> 8 files changed, 155 insertions(+), 155 deletions(-)</div><div><br></div><div>diff --git a/source/common/param.cpp b/source/common/param.cpp</div><div>index 71437aa98..ff38f37b0 100755</div><div>--- a/source/common/param.cpp</div><div>+++ b/source/common/param.cpp</div><div>@@ -2046,7 +2046,7 @@ static void appendtool(x265_param* param, char* buf, size_t size, const char* to</div><div>     if (strlen(buf) + strlen(toolstr) + overhead >= size)</div><div>     {</div><div>         x265_log(param, X265_LOG_INFO, "tools:%s\n", buf);</div><div>-        sprintf(buf, " %s", toolstr);</div><div>+        snprintf(buf, sizeof(buf), " %s", toolstr);</div><div>     }</div><div>     else</div><div>     {</div><div>@@ -2126,7 +2126,7 @@ void x265_print_params(x265_param* param)</div><div>     char buf[80] = { 0 };</div><div>     char tmp[40];</div><div> #define TOOLOPT(FLAG, STR) if (FLAG) appendtool(param, buf, sizeof(buf), STR);</div><div>-#define TOOLVAL(VAL, STR)  if (VAL) { sprintf(tmp, STR, VAL); appendtool(param, buf, sizeof(buf), tmp); }</div><div>+#define TOOLVAL(VAL, STR)  if (VAL) { snprintf(tmp, sizeof(tmp), STR, VAL); appendtool(param, buf, sizeof(buf), tmp); }</div><div>     TOOLOPT(param->bEnableRectInter, "rect");</div><div>     TOOLOPT(param->bEnableAMP, "amp");</div><div>     TOOLOPT(param->limitModes, "limit-modes");</div><div>@@ -2170,7 +2170,7 @@ void x265_print_params(x265_param* param)</div><div>     {</div><div>         if (param->deblockingFilterBetaOffset || param->deblockingFilterTCOffset)</div><div>         {</div><div>-            sprintf(tmp, "deblock(tC=%d:B=%d)", param->deblockingFilterTCOffset, param->deblockingFilterBetaOffset);</div><div>+            snprintf(tmp, sizeof(tmp), "deblock(tC=%d:B=%d)", param->deblockingFilterTCOffset, param->deblockingFilterBetaOffset);</div><div>             appendtool(param, buf, sizeof(buf), tmp);</div><div>         }</div><div>         else</div><div>@@ -2211,34 +2211,34 @@ char *x265_param2string(x265_param* p, int padx, int pady)</div><div>     if (!buf)</div><div>         return NULL;</div><div> #define BOOL(param, cliopt) \</div><div>-    s += sprintf(s, " %s", (param) ? cliopt : "no-" cliopt);</div><div>+    s += snprintf(s, sizeof(s), " %s", (param) ? cliopt : "no-" cliopt);</div><div> </div><div>-    s += sprintf(s, "cpuid=%d", p->cpuid);</div><div>-    s += sprintf(s, " frame-threads=%d", p->frameNumThreads);</div><div>+    s += snprintf(s, sizeof(s), "cpuid=%d", p->cpuid);</div><div>+    s += snprintf(s, sizeof(s), " frame-threads=%d", p->frameNumThreads);</div><div>     if (p->numaPools)</div><div>-        s += sprintf(s, " numa-pools=%s", p->numaPools);</div><div>+        s += snprintf(s, sizeof(s), " numa-pools=%s", p->numaPools);</div><div>     BOOL(p->bEnableWavefront, "wpp");</div><div>     BOOL(p->bDistributeModeAnalysis, "pmode");</div><div>     BOOL(p->bDistributeMotionEstimation, "pme");</div><div>     BOOL(p->bEnablePsnr, "psnr");</div><div>     BOOL(p->bEnableSsim, "ssim");</div><div>-    s += sprintf(s, " log-level=%d", p->logLevel);</div><div>+    s += snprintf(s, sizeof(s), " log-level=%d", p->logLevel);</div><div>     if (p->csvfn)</div><div>-        s += sprintf(s, " csv csv-log-level=%d", p->csvLogLevel);</div><div>-    s += sprintf(s, " bitdepth=%d", p->internalBitDepth);</div><div>-    s += sprintf(s, " input-csp=%d", p->internalCsp);</div><div>-    s += sprintf(s, " fps=%u/%u", p->fpsNum, p->fpsDenom);</div><div>-    s += sprintf(s, " input-res=%dx%d", p->sourceWidth - padx, p->sourceHeight - pady);</div><div>-    s += sprintf(s, " interlace=%d", p->interlaceMode);</div><div>-    s += sprintf(s, " total-frames=%d", p->totalFrames);</div><div>+        s += snprintf(s, sizeof(s), " csv csv-log-level=%d", p->csvLogLevel);</div><div>+    s += snprintf(s, sizeof(s), " bitdepth=%d", p->internalBitDepth);</div><div>+    s += snprintf(s, sizeof(s), " input-csp=%d", p->internalCsp);</div><div>+    s += snprintf(s, sizeof(s), " fps=%u/%u", p->fpsNum, p->fpsDenom);</div><div>+    s += snprintf(s, sizeof(s), " input-res=%dx%d", p->sourceWidth - padx, p->sourceHeight - pady);</div><div>+    s += snprintf(s, sizeof(s), " interlace=%d", p->interlaceMode);</div><div>+    s += snprintf(s, sizeof(s), " total-frames=%d", p->totalFrames);</div><div>     if (p->chunkStart)</div><div>-        s += sprintf(s, " chunk-start=%d", p->chunkStart);</div><div>+        s += snprintf(s, sizeof(s), " chunk-start=%d", p->chunkStart);</div><div>     if (p->chunkEnd)</div><div>-        s += sprintf(s, " chunk-end=%d", p->chunkEnd);</div><div>-    s += sprintf(s, " level-idc=%d", p->levelIdc);</div><div>-    s += sprintf(s, " high-tier=%d", p->bHighTier);</div><div>-    s += sprintf(s, " uhd-bd=%d", p->uhdBluray);</div><div>-    s += sprintf(s, " ref=%d", p->maxNumReferences);</div><div>+        s += snprintf(s, sizeof(s), " chunk-end=%d", p->chunkEnd);</div><div>+    s += snprintf(s, sizeof(s), " level-idc=%d", p->levelIdc);</div><div>+    s += snprintf(s, sizeof(s), " high-tier=%d", p->bHighTier);</div><div>+    s += snprintf(s, sizeof(s), " uhd-bd=%d", p->uhdBluray);</div><div>+    s += snprintf(s, sizeof(s), " ref=%d", p->maxNumReferences);</div><div>     BOOL(p->bAllowNonConformance, "allow-non-conformance");</div><div>     BOOL(p->bRepeatHeaders, "repeat-headers");</div><div>     BOOL(p->bAnnexB, "annexb");</div><div>@@ -2247,173 +2247,173 @@ char *x265_param2string(x265_param* p, int padx, int pady)</div><div>     BOOL(p->bEnableEndOfSequence, "eos");</div><div>     BOOL(p->bEmitHRDSEI, "hrd");</div><div>     BOOL(p->bEmitInfoSEI, "info");</div><div>-    s += sprintf(s, " hash=%d", p->decodedPictureHashSEI);</div><div>-    s += sprintf(s, " temporal-layers=%d", p->bEnableTemporalSubLayers);</div><div>+    s += snprintf(s, sizeof(s), " hash=%d", p->decodedPictureHashSEI);</div><div>+    s += snprintf(s, sizeof(s), " temporal-layers=%d", p->bEnableTemporalSubLayers);</div><div>     BOOL(p->bOpenGOP, "open-gop");</div><div>-    s += sprintf(s, " min-keyint=%d", p->keyframeMin);</div><div>-    s += sprintf(s, " keyint=%d", p->keyframeMax);</div><div>-    s += sprintf(s, " gop-lookahead=%d", p->gopLookahead);</div><div>-    s += sprintf(s, " bframes=%d", p->bframes);</div><div>-    s += sprintf(s, " b-adapt=%d", p->bFrameAdaptive);</div><div>+    s += snprintf(s, sizeof(s), " min-keyint=%d", p->keyframeMin);</div><div>+    s += snprintf(s, sizeof(s), " keyint=%d", p->keyframeMax);</div><div>+    s += snprintf(s, sizeof(s), " gop-lookahead=%d", p->gopLookahead);</div><div>+    s += snprintf(s, sizeof(s), " bframes=%d", p->bframes);</div><div>+    s += snprintf(s, sizeof(s), " b-adapt=%d", p->bFrameAdaptive);</div><div>     BOOL(p->bBPyramid, "b-pyramid");</div><div>-    s += sprintf(s, " bframe-bias=%d", p->bFrameBias);</div><div>-    s += sprintf(s, " rc-lookahead=%d", p->lookaheadDepth);</div><div>-    s += sprintf(s, " lookahead-slices=%d", p->lookaheadSlices);</div><div>-    s += sprintf(s, " scenecut=%d", p->scenecutThreshold);</div><div>+    s += snprintf(s, sizeof(s), " bframe-bias=%d", p->bFrameBias);</div><div>+    s += snprintf(s, sizeof(s), " rc-lookahead=%d", p->lookaheadDepth);</div><div>+    s += snprintf(s, sizeof(s), " lookahead-slices=%d", p->lookaheadSlices);</div><div>+    s += snprintf(s, sizeof(s), " scenecut=%d", p->scenecutThreshold);</div><div>     BOOL(p->bHistBasedSceneCut, "hist-scenecut");</div><div>-    s += sprintf(s, " radl=%d", p->radl);</div><div>+    s += snprintf(s, sizeof(s), " radl=%d", p->radl);</div><div>     BOOL(p->bEnableHRDConcatFlag, "splice");</div><div>     BOOL(p->bIntraRefresh, "intra-refresh");</div><div>-    s += sprintf(s, " ctu=%d", p->maxCUSize);</div><div>-    s += sprintf(s, " min-cu-size=%d", p->minCUSize);</div><div>+    s += snprintf(s, sizeof(s), " ctu=%d", p->maxCUSize);</div><div>+    s += snprintf(s, sizeof(s), " min-cu-size=%d", p->minCUSize);</div><div>     BOOL(p->bEnableRectInter, "rect");</div><div>     BOOL(p->bEnableAMP, "amp");</div><div>-    s += sprintf(s, " max-tu-size=%d", p->maxTUSize);</div><div>-    s += sprintf(s, " tu-inter-depth=%d", p->tuQTMaxInterDepth);</div><div>-    s += sprintf(s, " tu-intra-depth=%d", p->tuQTMaxIntraDepth);</div><div>-    s += sprintf(s, " limit-tu=%d", p->limitTU);</div><div>-    s += sprintf(s, " rdoq-level=%d", p->rdoqLevel);</div><div>-    s += sprintf(s, " dynamic-rd=%.2f", p->dynamicRd);</div><div>+    s += snprintf(s, sizeof(s), " max-tu-size=%d", p->maxTUSize);</div><div>+    s += snprintf(s, sizeof(s), " tu-inter-depth=%d", p->tuQTMaxInterDepth);</div><div>+    s += snprintf(s, sizeof(s), " tu-intra-depth=%d", p->tuQTMaxIntraDepth);</div><div>+    s += snprintf(s, sizeof(s), " limit-tu=%d", p->limitTU);</div><div>+    s += snprintf(s, sizeof(s), " rdoq-level=%d", p->rdoqLevel);</div><div>+    s += snprintf(s, sizeof(s), " dynamic-rd=%.2f", p->dynamicRd);</div><div>     BOOL(p->bSsimRd, "ssim-rd");</div><div>     BOOL(p->bEnableSignHiding, "signhide");</div><div>     BOOL(p->bEnableTransformSkip, "tskip");</div><div>-    s += sprintf(s, " nr-intra=%d", p->noiseReductionIntra);</div><div>-    s += sprintf(s, " nr-inter=%d", p->noiseReductionInter);</div><div>+    s += snprintf(s, sizeof(s), " nr-intra=%d", p->noiseReductionIntra);</div><div>+    s += snprintf(s, sizeof(s), " nr-inter=%d", p->noiseReductionInter);</div><div>     BOOL(p->bEnableConstrainedIntra, "constrained-intra");</div><div>     BOOL(p->bEnableStrongIntraSmoothing, "strong-intra-smoothing");</div><div>-    s += sprintf(s, " max-merge=%d", p->maxNumMergeCand);</div><div>-    s += sprintf(s, " limit-refs=%d", p->limitReferences);</div><div>+    s += snprintf(s, sizeof(s), " max-merge=%d", p->maxNumMergeCand);</div><div>+    s += snprintf(s, sizeof(s), " limit-refs=%d", p->limitReferences);</div><div>     BOOL(p->limitModes, "limit-modes");</div><div>-    s += sprintf(s, " me=%d", p->searchMethod);</div><div>-    s += sprintf(s, " subme=%d", p->subpelRefine);</div><div>-    s += sprintf(s, " merange=%d", p->searchRange);</div><div>+    s += snprintf(s, sizeof(s), " me=%d", p->searchMethod);</div><div>+    s += snprintf(s, sizeof(s), " subme=%d", p->subpelRefine);</div><div>+    s += snprintf(s, sizeof(s), " merange=%d", p->searchRange);</div><div>     BOOL(p->bEnableTemporalMvp, "temporal-mvp");</div><div>     BOOL(p->bEnableFrameDuplication, "frame-dup");</div><div>     if(p->bEnableFrameDuplication)</div><div>-        s += sprintf(s, " dup-threshold=%d", p->dupThreshold);</div><div>+        s += snprintf(s, sizeof(s), " dup-threshold=%d", p->dupThreshold);</div><div>     BOOL(p->bEnableHME, "hme");</div><div>     if (p->bEnableHME)</div><div>     {</div><div>-        s += sprintf(s, " Level 0,1,2=%d,%d,%d", p->hmeSearchMethod[0], p->hmeSearchMethod[1], p->hmeSearchMethod[2]);</div><div>-        s += sprintf(s, " merange L0,L1,L2=%d,%d,%d", p->hmeRange[0], p->hmeRange[1], p->hmeRange[2]);</div><div>+        s += snprintf(s, sizeof(s), " Level 0,1,2=%d,%d,%d", p->hmeSearchMethod[0], p->hmeSearchMethod[1], p->hmeSearchMethod[2]);</div><div>+        s += snprintf(s, sizeof(s), " merange L0,L1,L2=%d,%d,%d", p->hmeRange[0], p->hmeRange[1], p->hmeRange[2]);</div><div>     }</div><div>     BOOL(p->bEnableWeightedPred, "weightp");</div><div>     BOOL(p->bEnableWeightedBiPred, "weightb");</div><div>     BOOL(p->bSourceReferenceEstimation, "analyze-src-pics");</div><div>     BOOL(p->bEnableLoopFilter, "deblock");</div><div>     if (p->bEnableLoopFilter)</div><div>-        s += sprintf(s, "=%d:%d", p->deblockingFilterTCOffset, p->deblockingFilterBetaOffset);</div><div>+        s += snprintf(s, sizeof(s), "=%d:%d", p->deblockingFilterTCOffset, p->deblockingFilterBetaOffset);</div><div>     BOOL(p->bEnableSAO, "sao");</div><div>     BOOL(p->bSaoNonDeblocked, "sao-non-deblock");</div><div>-    s += sprintf(s, " rd=%d", p->rdLevel);</div><div>-    s += sprintf(s, " selective-sao=%d", p->selectiveSAO);</div><div>+    s += snprintf(s, sizeof(s), " rd=%d", p->rdLevel);</div><div>+    s += snprintf(s, sizeof(s), " selective-sao=%d", p->selectiveSAO);</div><div>     BOOL(p->bEnableEarlySkip, "early-skip");</div><div>     BOOL(p->recursionSkipMode, "rskip");</div><div>     if (p->recursionSkipMode == EDGE_BASED_RSKIP)</div><div>-        s += sprintf(s, " rskip-edge-threshold=%f", p->edgeVarThreshold);</div><div>+        s += snprintf(s, sizeof(s), " rskip-edge-threshold=%f", p->edgeVarThreshold);</div><div> </div><div>     BOOL(p->bEnableFastIntra, "fast-intra");</div><div>     BOOL(p->bEnableTSkipFast, "tskip-fast");</div><div>     BOOL(p->bCULossless, "cu-lossless");</div><div>     BOOL(p->bIntraInBFrames, "b-intra");</div><div>     BOOL(p->bEnableSplitRdSkip, "splitrd-skip");</div><div>-    s += sprintf(s, " rdpenalty=%d", p->rdPenalty);</div><div>-    s += sprintf(s, " psy-rd=%.2f", p->psyRd);</div><div>-    s += sprintf(s, " psy-rdoq=%.2f", p->psyRdoq);</div><div>+    s += snprintf(s, sizeof(s), " rdpenalty=%d", p->rdPenalty);</div><div>+    s += snprintf(s, sizeof(s), " psy-rd=%.2f", p->psyRd);</div><div>+    s += snprintf(s, sizeof(s), " psy-rdoq=%.2f", p->psyRdoq);</div><div>     BOOL(p->bEnableRdRefine, "rd-refine");</div><div>     BOOL(p->bLossless, "lossless");</div><div>-    s += sprintf(s, " cbqpoffs=%d", p->cbQpOffset);</div><div>-    s += sprintf(s, " crqpoffs=%d", p->crQpOffset);</div><div>-    s += sprintf(s, " rc=%s", p->rc.rateControlMode == X265_RC_ABR ? (</div><div>+    s += snprintf(s, sizeof(s), " cbqpoffs=%d", p->cbQpOffset);</div><div>+    s += snprintf(s, sizeof(s), " crqpoffs=%d", p->crQpOffset);</div><div>+    s += snprintf(s, sizeof(s), " rc=%s", p->rc.rateControlMode == X265_RC_ABR ? (</div><div>          p->rc.bitrate == p->rc.vbvMaxBitrate ? "cbr" : "abr")</div><div>          : p->rc.rateControlMode == X265_RC_CRF ? "crf" : "cqp");</div><div>     if (p->rc.rateControlMode == X265_RC_ABR || p->rc.rateControlMode == X265_RC_CRF)</div><div>     {</div><div>         if (p->rc.rateControlMode == X265_RC_CRF)</div><div>-            s += sprintf(s, " crf=%.1f", p->rc.rfConstant);</div><div>+            s += snprintf(s, sizeof(s), " crf=%.1f", p->rc.rfConstant);</div><div>         else</div><div>-            s += sprintf(s, " bitrate=%d", p->rc.bitrate);</div><div>-        s += sprintf(s, " qcomp=%.2f qpstep=%d", p->rc.qCompress, p->rc.qpStep);</div><div>-        s += sprintf(s, " stats-write=%d", p->rc.bStatWrite);</div><div>-        s += sprintf(s, " stats-read=%d", p->rc.bStatRead);</div><div>+            s += snprintf(s, sizeof(s), " bitrate=%d", p->rc.bitrate);</div><div>+        s += snprintf(s, sizeof(s), " qcomp=%.2f qpstep=%d", p->rc.qCompress, p->rc.qpStep);</div><div>+        s += snprintf(s, sizeof(s), " stats-write=%d", p->rc.bStatWrite);</div><div>+        s += snprintf(s, sizeof(s), " stats-read=%d", p->rc.bStatRead);</div><div>         if (p->rc.bStatRead)</div><div>-            s += sprintf(s, " cplxblur=%.1f qblur=%.1f",</div><div>+            s += snprintf(s, sizeof(s), " cplxblur=%.1f qblur=%.1f",</div><div>             p->rc.complexityBlur, p->rc.qblur);</div><div>         if (p->rc.bStatWrite && !p->rc.bStatRead)</div><div>             BOOL(p->rc.bEnableSlowFirstPass, "slow-firstpass");</div><div>         if (p->rc.vbvBufferSize)</div><div>         {</div><div>-            s += sprintf(s, " vbv-maxrate=%d vbv-bufsize=%d vbv-init=%.1f min-vbv-fullness=%.1f max-vbv-fullness=%.1f",</div><div>+            s += snprintf(s, sizeof(s), " vbv-maxrate=%d vbv-bufsize=%d vbv-init=%.1f min-vbv-fullness=%.1f max-vbv-fullness=%.1f",</div><div>                 p->rc.vbvMaxBitrate, p->rc.vbvBufferSize, p->rc.vbvBufferInit, p->minVbvFullness, p->maxVbvFullness);</div><div>             if (p->vbvBufferEnd)</div><div>-                s += sprintf(s, " vbv-end=%.1f vbv-end-fr-adj=%.1f", p->vbvBufferEnd, p->vbvEndFrameAdjust);</div><div>+                s += snprintf(s, sizeof(s), " vbv-end=%.1f vbv-end-fr-adj=%.1f", p->vbvBufferEnd, p->vbvEndFrameAdjust);</div><div>             if (p->rc.rateControlMode == X265_RC_CRF)</div><div>-                s += sprintf(s, " crf-max=%.1f crf-min=%.1f", p->rc.rfConstantMax, p->rc.rfConstantMin);   </div><div>+                s += snprintf(s, sizeof(s), " crf-max=%.1f crf-min=%.1f", p->rc.rfConstantMax, p->rc.rfConstantMin);</div><div>         }</div><div>     }</div><div>     else if (p->rc.rateControlMode == X265_RC_CQP)</div><div>-        s += sprintf(s, " qp=%d", p->rc.qp);</div><div>+        s += snprintf(s, sizeof(s), " qp=%d", p->rc.qp);</div><div>     if (!(p->rc.rateControlMode == X265_RC_CQP && p->rc.qp == 0))</div><div>     {</div><div>-        s += sprintf(s, " ipratio=%.2f", p->rc.ipFactor);</div><div>+        s += snprintf(s, sizeof(s), " ipratio=%.2f", p->rc.ipFactor);</div><div>         if (p->bframes)</div><div>-            s += sprintf(s, " pbratio=%.2f", p->rc.pbFactor);</div><div>+            s += snprintf(s, sizeof(s), " pbratio=%.2f", p->rc.pbFactor);</div><div>     }</div><div>-    s += sprintf(s, " aq-mode=%d", p->rc.aqMode);</div><div>-    s += sprintf(s, " aq-strength=%.2f", p->rc.aqStrength);</div><div>+    s += snprintf(s, sizeof(s), " aq-mode=%d", p->rc.aqMode);</div><div>+     += snprintf(s, sizeof(s), " aq-strength=%.2f", p->rc.aqStrength);</div><div>     BOOL(p->rc.cuTree, "cutree");</div><div>-    s += sprintf(s, " zone-count=%d", p->rc.zoneCount);</div><div>+    s += snprintf(s, sizeof(s), " zone-count=%d", p->rc.zoneCount);</div><div>     if (p->rc.zoneCount)</div><div>     {</div><div>         for (int i = 0; i < p->rc.zoneCount; ++i)</div><div>         {</div><div>-            s += sprintf(s, " zones: start-frame=%d end-frame=%d",</div><div>+            s += snprintf(s, sizeof(s), " zones: start-frame=%d end-frame=%d",</div><div>                  p->rc.zones[i].startFrame, p->rc.zones[i].endFrame);</div><div>             if (p->rc.zones[i].bForceQp)</div><div>-                s += sprintf(s, " qp=%d", p->rc.zones[i].qp);</div><div>+                s += snprintf(s, sizeof(s), " qp=%d", p->rc.zones[i].qp);</div><div>             else</div><div>-                s += sprintf(s, " bitrate-factor=%f", p->rc.zones[i].bitrateFactor);</div><div>+                s += snprintf(s, sizeof(s), " bitrate-factor=%f", p->rc.zones[i].bitrateFactor);</div><div>         }</div><div>     }</div><div>     BOOL(p->rc.bStrictCbr, "strict-cbr");</div><div>-    s += sprintf(s, " qg-size=%d", p->rc.qgSize);</div><div>+    s += snprintf(s, sizeof(s), " qg-size=%d", p->rc.qgSize);</div><div>     BOOL(p->rc.bEnableGrain, "rc-grain");</div><div>-    s += sprintf(s, " qpmax=%d qpmin=%d", p->rc.qpMax, p->rc.qpMin);</div><div>+    s += snprintf(s, sizeof(s), " qpmax=%d qpmin=%d", p->rc.qpMax, p->rc.qpMin);</div><div>     BOOL(p->rc.bEnableConstVbv, "const-vbv");</div><div>-    s += sprintf(s, " sar=%d", p->vui.aspectRatioIdc);</div><div>+    s += snprintf(s, sizeof(s), " sar=%d", p->vui.aspectRatioIdc);</div><div>     if (p->vui.aspectRatioIdc == X265_EXTENDED_SAR)</div><div>-        s += sprintf(s, " sar-width : sar-height=%d:%d", p->vui.sarWidth, p->vui.sarHeight);</div><div>-    s += sprintf(s, " overscan=%d", p->vui.bEnableOverscanInfoPresentFlag);</div><div>+        s += snprintf(s, sizeof(s), " sar-width : sar-height=%d:%d", p->vui.sarWidth, p->vui.sarHeight);</div><div>+    s += snprintf(s, sizeof(s), " overscan=%d", p->vui.bEnableOverscanInfoPresentFlag);</div><div>     if (p->vui.bEnableOverscanInfoPresentFlag)</div><div>-        s += sprintf(s, " overscan-crop=%d", p->vui.bEnableOverscanAppropriateFlag);</div><div>-    s += sprintf(s, " videoformat=%d", p->vui.videoFormat);</div><div>-    s += sprintf(s, " range=%d", p->vui.bEnableVideoFullRangeFlag);</div><div>-    s += sprintf(s, " colorprim=%d", p->vui.colorPrimaries);</div><div>-    s += sprintf(s, " transfer=%d", p->vui.transferCharacteristics);</div><div>-    s += sprintf(s, " colormatrix=%d", p->vui.matrixCoeffs);</div><div>-    s += sprintf(s, " chromaloc=%d", p->vui.bEnableChromaLocInfoPresentFlag);</div><div>+        s += snprintf(s, sizeof(s), " overscan-crop=%d", p->vui.bEnableOverscanAppropriateFlag);</div><div>+    s += snprintf(s, sizeof(s), " videoformat=%d", p->vui.videoFormat);</div><div>+    s += snprintf(s, sizeof(s), " range=%d", p->vui.bEnableVideoFullRangeFlag);</div><div>+    s += snprintf(s, sizeof(s), " colorprim=%d", p->vui.colorPrimaries);</div><div>+    s += snprintf(s, sizeof(s), " transfer=%d", p->vui.transferCharacteristics);</div><div>+    s += snprintf(s, sizeof(s), " colormatrix=%d", p->vui.matrixCoeffs);</div><div>+    s += snprintf(s, sizeof(s), " chromaloc=%d", p->vui.bEnableChromaLocInfoPresentFlag);</div><div>     if (p->vui.bEnableChromaLocInfoPresentFlag)</div><div>-        s += sprintf(s, " chromaloc-top=%d chromaloc-bottom=%d",</div><div>+        s += snprintf(s, sizeof(s), " chromaloc-top=%d chromaloc-bottom=%d",</div><div>         p->vui.chromaSampleLocTypeTopField, p->vui.chromaSampleLocTypeBottomField);</div><div>-    s += sprintf(s, " display-window=%d", p->vui.bEnableDefaultDisplayWindowFlag);</div><div>+    s += snprintf(s, sizeof(s), " display-window=%d", p->vui.bEnableDefaultDisplayWindowFlag);</div><div>     if (p->vui.bEnableDefaultDisplayWindowFlag)</div><div>-        s += sprintf(s, " left=%d top=%d right=%d bottom=%d",</div><div>+        s += snprintf(s, sizeof(s), " left=%d top=%d right=%d bottom=%d",</div><div>         p->vui.defDispWinLeftOffset, p->vui.defDispWinTopOffset,</div><div>         p->vui.defDispWinRightOffset, p->vui.defDispWinBottomOffset);</div><div>     if (p->masteringDisplayColorVolume)</div><div>-        s += sprintf(s, " master-display=%s", p->masteringDisplayColorVolume);</div><div>+        s += snprintf(s, sizeof(s), " master-display=%s", p->masteringDisplayColorVolume);</div><div>     if (p->bEmitCLL)</div><div>-        s += sprintf(s, " cll=%hu,%hu", p->maxCLL, p->maxFALL);</div><div>-    s += sprintf(s, " min-luma=%hu", p->minLuma);</div><div>-    s += sprintf(s, " max-luma=%hu", p->maxLuma);</div><div>-    s += sprintf(s, " log2-max-poc-lsb=%d", p->log2MaxPocLsb);</div><div>+        s += snprintf(s, sizeof(s), " cll=%hu,%hu", p->maxCLL, p->maxFALL);</div><div>+    s += snprintf(s, sizeof(s), " min-luma=%hu", p->minLuma);</div><div>+    s += snprintf(s, sizeof(s), " max-luma=%hu", p->maxLuma);</div><div>+    s += snprintf(s, sizeof(s), " log2-max-poc-lsb=%d", p->log2MaxPocLsb);</div><div>     BOOL(p->bEmitVUITimingInfo, "vui-timing-info");</div><div>     BOOL(p->bEmitVUIHRDInfo, "vui-hrd-info");</div><div>-    s += sprintf(s, " slices=%d", p->maxSlices);</div><div>+    s += snprintf(s, sizeof(s), " slices=%d", p->maxSlices);</div><div>     BOOL(p->bOptQpPPS, "opt-qp-pps");</div><div>     BOOL(p->bOptRefListLengthPPS, "opt-ref-list-length-pps");</div><div>     BOOL(p->bMultiPassOptRPS, "multi-pass-opt-rps");</div><div>-    s += sprintf(s, " scenecut-bias=%.2f", p->scenecutBias);</div><div>+    s += snprintf(s, sizeof(s), " scenecut-bias=%.2f", p->scenecutBias);</div><div>     BOOL(p->bOptCUDeltaQP, "opt-cu-delta-qp");</div><div>     BOOL(p->bAQMotion, "aq-motion");</div><div>     BOOL(p->bEmitHDR10SEI, "hdr10");</div><div>@@ -2421,37 +2421,37 @@ char *x265_param2string(x265_param* p, int padx, int pady)</div><div>     BOOL(p->bDhdr10opt, "dhdr10-opt");</div><div>     BOOL(p->bEmitIDRRecoverySEI, "idr-recovery-sei");</div><div>     if (p->analysisSave)</div><div>-        s += sprintf(s, " analysis-save");</div><div>+        s += snprintf(s, sizeof(s), " analysis-save");</div><div>     if (p->analysisLoad)</div><div>-        s += sprintf(s, " analysis-load");</div><div>-    s += sprintf(s, " analysis-reuse-level=%d", p->analysisReuseLevel);</div><div>-    s += sprintf(s, " analysis-save-reuse-level=%d", p->analysisSaveReuseLevel);</div><div>-    s += sprintf(s, " analysis-load-reuse-level=%d", p->analysisLoadReuseLevel);</div><div>-    s += sprintf(s, " scale-factor=%d", p->scaleFactor);</div><div>-    s += sprintf(s, " refine-intra=%d", p->intraRefine);</div><div>-    s += sprintf(s, " refine-inter=%d", p->interRefine);</div><div>-    s += sprintf(s, " refine-mv=%d", p->mvRefine);</div><div>-    s += sprintf(s, " refine-ctu-distortion=%d", p->ctuDistortionRefine);</div><div>+        s += snprintf(s, sizeof(s), " analysis-load");</div><div>+    s += snprintf(s, sizeof(s), " analysis-reuse-level=%d", p->analysisReuseLevel);</div><div>+    s += snprintf(s, sizeof(s), " analysis-save-reuse-level=%d", p->analysisSaveReuseLevel);</div><div>+    s += snprintf(s, sizeof(s), " analysis-load-reuse-level=%d", p->analysisLoadReuseLevel);</div><div>+    s += snprintf(s, sizeof(s), " scale-factor=%d", p->scaleFactor);</div><div>+    s += snprintf(s, sizeof(s), " refine-intra=%d", p->intraRefine);</div><div>+    s += snprintf(s, sizeof(s), " refine-inter=%d", p->interRefine);</div><div>+    s += snprintf(s, sizeof(s), " refine-mv=%d", p->mvRefine);</div><div>+    s += snprintf(s, sizeof(s), " refine-ctu-distortion=%d", p->ctuDistortionRefine);</div><div>     BOOL(p->bLimitSAO, "limit-sao");</div><div>-    s += sprintf(s, " ctu-info=%d", p->bCTUInfo);</div><div>+    s += snprintf(s, sizeof(s), " ctu-info=%d", p->bCTUInfo);</div><div>     BOOL(p->bLowPassDct, "lowpass-dct");</div><div>-    s += sprintf(s, " refine-analysis-type=%d", p->bAnalysisType);</div><div>-    s += sprintf(s, " copy-pic=%d", p->bCopyPicToFrame);</div><div>-    s += sprintf(s, " max-ausize-factor=%.1f", p->maxAUSizeFactor);</div><div>+    s += snprintf(s, sizeof(s), " refine-analysis-type=%d", p->bAnalysisType);</div><div>+    s += snprintf(s, sizeof(s), " copy-pic=%d", p->bCopyPicToFrame);</div><div>+    s += snprintf(s, sizeof(s), " max-ausize-factor=%.1f", p->maxAUSizeFactor);</div><div>     BOOL(p->bDynamicRefine, "dynamic-refine");</div><div>     BOOL(p->bSingleSeiNal, "single-sei");</div><div>     BOOL(p->rc.hevcAq, "hevc-aq");</div><div>     BOOL(p->bEnableSvtHevc, "svt");</div><div>     BOOL(p->bField, "field");</div><div>-    s += sprintf(s, " qp-adaptation-range=%.2f", p->rc.qpAdaptationRange);</div><div>-    s += sprintf(s, " scenecut-aware-qp=%d", p->bEnableSceneCutAwareQp);</div><div>+    s += snprintf(s, sizeof(s), " qp-adaptation-range=%.2f", p->rc.qpAdaptationRange);</div><div>+    s += snprintf(s, sizeof(s), " scenecut-aware-qp=%d", p->bEnableSceneCutAwareQp);</div><div>     if (p->bEnableSceneCutAwareQp)</div><div>-        s += sprintf(s, " fwd-scenecut-window=%d fwd-ref-qp-delta=%f fwd-nonref-qp-delta=%f bwd-scenecut-window=%d bwd-ref-qp-delta=%f bwd-nonref-qp-delta=%f", p->fwdMaxScenecutWindow, p->fwdRefQpDelta[0], p->fwdNonRefQpDelta[0], p->bwdMaxScenecutWindow, p->bwdRefQpDelta[0], p->bwdNonRefQpDelta[0]);</div><div>-    s += sprintf(s, " conformance-window-offsets right=%d bottom=%d", p->confWinRightOffset, p->confWinBottomOffset);</div><div>-    s += sprintf(s, " decoder-max-rate=%d", p->decoderVbvMaxRate);</div><div>+        s += snprintf(s, sizeof(s), " fwd-scenecut-window=%d fwd-ref-qp-delta=%f fwd-nonref-qp-delta=%f bwd-scenecut-window=%d bwd-ref-qp-delta=%f bwd-nonref-qp-delta=%f", p->fwdMaxScenecutWindow, p->fwdRefQpDelta[0], p->fwdNonRefQpDelta[0], p->bwdMaxScenecutWindow, p->bwdRefQpDelta[0], p->bwdNonRefQpDelta[0]);</div><div>+    s += snprintf(s, sizeof(s), "conformance-window-offsets right=%d bottom=%d", p->confWinRightOffset, p->confWinBottomOffset);</div><div>+    s += snprintf(s, sizeof(s), " decoder-max-rate=%d", p->decoderVbvMaxRate);</div><div>     BOOL(p->bliveVBV2pass, "vbv-live-multi-pass");</div><div>     if (p->filmGrain)</div><div>-        s += sprintf(s, " film-grain=%s", p->filmGrain); // Film grain characteristics model filename</div><div>+        s += snprintf(s, sizeof(s), " film-grain=%s", p->filmGrain); // Film grain characteristics model filename</div><div>     if (p->aomFilmGrain)</div><div>         s += sprintf(s, " aom-film-grain=%s", p->aomFilmGrain);</div><div>     BOOL(p->bEnableTemporalFilter, "mcstf");</div><div>diff --git a/source/common/primitives.cpp b/source/common/primitives.cpp</div><div>index 56d4319bf..20f095a63 100644</div><div>--- a/source/common/primitives.cpp</div><div>+++ b/source/common/primitives.cpp</div><div>@@ -215,7 +215,7 @@ void x265_report_simd(x265_param* param)</div><div>         int cpuid = param->cpuid;</div><div> </div><div>         char buf[1000];</div><div>-        char *p = buf + sprintf(buf, "using cpu capabilities:");</div><div>+        char *p = buf + snprintf(buf, sizeof(buf), "using cpu capabilities:");</div><div>         char *none = p;</div><div>         for (int i = 0; X265_NS::cpu_names[i].flags; i++)</div><div>         {</div><div>@@ -236,11 +236,11 @@ void x265_report_simd(x265_param* param)</div><div>                 continue;</div><div>             if ((cpuid & X265_NS::cpu_names[i].flags) == X265_NS::cpu_names[i].flags</div><div>                 && (!i || X265_NS::cpu_names[i].flags != X265_NS::cpu_names[i - 1].flags))</div><div>-                p += sprintf(p, " %s", X265_NS::cpu_names[i].name);</div><div>+                p += snprintf(p, sizeof(p), " %s", X265_NS::cpu_names[i].name);</div><div>         }</div><div> </div><div>         if (p == none)</div><div>-            sprintf(p, " none!");</div><div>+            snprintf(p, sizeof(p), " none!");</div><div>         x265_log(param, X265_LOG_INFO, "%s\n", buf);</div><div>     }</div><div> }</div><div>diff --git a/source/common/threadpool.cpp b/source/common/threadpool.cpp</div><div>index 9c27be783..ab6bd0d43 100644</div><div>--- a/source/common/threadpool.cpp</div><div>+++ b/source/common/threadpool.cpp</div><div>@@ -309,9 +309,9 @@ ThreadPool* ThreadPool::allocThreadPools(x265_param* p, int& numPools, bool isTh</div><div>          {</div><div>              char nextCount[10] = "";</div><div>              if (i)</div><div>-                 sprintf(nextCount, ",%d", cpusPerNode[i]);</div><div>+                 snprintf(nextCount, sizeof(nextCount), ",%d", cpusPerNode[i]);</div><div>              else</div><div>-                   sprintf(nextCount, "%d", cpusPerNode[i]);</div><div>+                   snprintf(nextCount, sizeof(nextCount), "%d", cpusPerNode[i]);</div><div>              strcat(poolString, nextCount);</div><div>          }</div><div>          x265_param_parse(p, "pools", poolString);</div><div>@@ -452,7 +452,7 @@ ThreadPool* ThreadPool::allocThreadPools(x265_param* p, int& numPools, bool isTh</div><div>                 int len = 0;</div><div>                 for (int j = 0; j < 64; j++)</div><div>                     if ((nodeMaskPerPool[node] >> j) & 1)</div><div>-                        len += sprintf(nodesstr + len, ",%d", j);</div><div>+                        len += snprintf(nodesstr + len, sizeof(nodesstr) - len, ",%d", j);</div><div>                 x265_log(p, X265_LOG_INFO, "Thread pool %d using %d threads on numa nodes %s\n", i, numThreads, nodesstr + 1);</div><div>                 delete[] nodesstr;</div><div>             }</div><div>diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp</div><div>index f5de400a4..431fb32b3 100644</div><div>--- a/source/encoder/encoder.cpp</div><div>+++ b/source/encoder/encoder.cpp</div><div>@@ -295,11 +295,11 @@ void Encoder::create()</div><div>     char buf[128];</div><div>     int len = 0;</div><div>     if (p->bEnableWavefront)</div><div>-        len += sprintf(buf + len, "wpp(%d rows)", rows);</div><div>+        len += snprintf(buf + len, sizeof(buf) - len, "wpp(%d rows)", rows);</div><div>     if (p->bDistributeModeAnalysis)</div><div>-        len += sprintf(buf + len, "%spmode", len ? "+" : "");</div><div>+        len += snprintf(buf + len,  sizeof(buf) - len, "%spmode", len ? "+" : "");</div><div>     if (p->bDistributeMotionEstimation)</div><div>-        len += sprintf(buf + len, "%spme ", len ? "+" : "");</div><div>+        len += snprintf(buf + len, sizeof(buf) - len, "%spme ", len ? "+" : "");</div><div>     if (!len)</div><div>         strcpy(buf, "none");</div><div> </div><div>@@ -2794,20 +2794,20 @@ char* Encoder::statsString(EncStats& stat, char* buffer)</div><div>     double fps = (double)m_param->fpsNum / m_param->fpsDenom;</div><div>     double scale = fps / 1000 / (double)stat.m_numPics;</div><div> </div><div>-    int len = sprintf(buffer, "%6u, ", stat.m_numPics);</div><div>+    int len = snprintf(buffer, sizeof(buffer), "%6u, ", stat.m_numPics);</div><div> </div><div>-    len += sprintf(buffer + len, "Avg QP:%2.2lf", stat.m_totalQp / (double)stat.m_numPics);</div><div>-    len += sprintf(buffer + len, "  kb/s: %-8.2lf", stat.m_accBits * scale);</div><div>+    len += snprintf(buffer + len, sizeof(buffer) - len, "Avg QP:%2.2lf", stat.m_totalQp / (double)stat.m_numPics);</div><div>+    len += snprintf(buffer + len, sizeof(buffer) - len, "  kb/s: %-8.2lf", stat.m_accBits * scale);</div><div>     if (m_param->bEnablePsnr)</div><div>     {</div><div>-        len += sprintf(buffer + len, "  PSNR Mean: Y:%.3lf U:%.3lf V:%.3lf",</div><div>+        len += snprintf(buffer + len, sizeof(buffer) - len,"  PSNR Mean: Y:%.3lf U:%.3lf V:%.3lf",</div><div>                        stat.m_psnrSumY / (double)stat.m_numPics,</div><div>                        stat.m_psnrSumU / (double)stat.m_numPics,</div><div>                        stat.m_psnrSumV / (double)stat.m_numPics);</div><div>     }</div><div>     if (m_param->bEnableSsim)</div><div>     {</div><div>-        sprintf(buffer + len, "  SSIM Mean: %.6lf (%.3lfdB)",</div><div>+        snprintf(buffer + len, sizeof(buffer) - len, "  SSIM Mean: %.6lf (%.3lfdB)",</div><div>                 stat.m_globalSsim / (double)stat.m_numPics,</div><div>                 x265_ssim2dB(stat.m_globalSsim / (double)stat.m_numPics));</div><div>     }</div><div>@@ -2864,19 +2864,19 @@ void Encoder::printSummary()</div><div>             double elapsedVideoTime = (double)m_analyzeAll[layer].m_numPics * m_param->fpsDenom / m_param->fpsNum;</div><div>             double bitrate = (0.001f * m_analyzeAll[layer].m_accBits) / elapsedVideoTime;</div><div> </div><div>-            p += sprintf(buffer + p, "\nencoded %d frames in %.2fs (%.2f fps), %.2f kb/s, Avg QP:%2.2lf", m_analyzeAll[layer].m_numPics,</div><div>+            p += snprintf(buffer + p, sizeof(buffer) - p,"\nencoded %d frames in %.2fs (%.2f fps), %.2f kb/s, Avg QP:%2.2lf", m_analyzeAll[layer].m_numPics,</div><div>                 elapsedEncodeTime, m_analyzeAll[layer].m_numPics / elapsedEncodeTime, bitrate, m_analyzeAll[layer].m_totalQp / (double)m_analyzeAll[layer].m_numPics);</div><div> </div><div>             if (m_param->bEnablePsnr)</div><div>             {</div><div>                 double globalPsnr = (m_analyzeAll[layer].m_psnrSumY * 6 + m_analyzeAll[layer].m_psnrSumU + m_analyzeAll[layer].m_psnrSumV) / (8 * m_analyzeAll[layer].m_numPics);</div><div>-                p += sprintf(buffer + p, ", Global PSNR: %.3f", globalPsnr);</div><div>+                p += snprintf(buffer + p, sizeof(buffer) - p, ", Global PSNR: %.3f", globalPsnr);</div><div>             }</div><div> </div><div>             if (m_param->bEnableSsim)</div><div>-                p += sprintf(buffer + p, ", SSIM Mean Y: %.7f (%6.3f dB)", m_analyzeAll[layer].m_globalSsim / m_analyzeAll[layer].m_numPics, x265_ssim2dB(m_analyzeAll[layer].m_globalSsim / m_analyzeAll[layer].m_numPics));</div><div>+                p += snprintf(buffer + p, sizeof(buffer) - p, ", SSIM Mean Y: %.7f (%6.3f dB)", m_analyzeAll[layer].m_globalSsim / m_analyzeAll[layer].m_numPics, x265_ssim2dB(m_analyzeAll[layer].m_globalSsim / m_analyzeAll[layer].m_numPics));</div><div> </div><div>-            sprintf(buffer + p, "\n");</div><div>+            snprintf(buffer + p, sizeof(buffer) - p, "\n");</div><div>             general_log(m_param, NULL, X265_LOG_INFO, buffer);</div><div>         }</div><div>         else</div><div>@@ -6209,7 +6209,7 @@ void Encoder::printReconfigureParams()</div><div>     x265_log(newParam, X265_LOG_DEBUG, "Reconfigured param options, input Frame: %d\n", m_pocLast + 1);</div><div> </div><div>     char tmp[60];</div><div>-#define TOOLCMP(COND1, COND2, STR)  if (COND1 != COND2) { sprintf(tmp, STR, COND1, COND2); x265_log(newParam, X265_LOG_DEBUG, tmp); }</div><div>+#define TOOLCMP(COND1, COND2, STR)  if (COND1 != COND2) { snprintf(tmp, sizeof(tmp), STR, COND1, COND2); x265_log(newParam, X265_LOG_DEBUG, tmp); }</div><div>     TOOLCMP(oldParam->maxNumReferences, newParam->maxNumReferences, "ref=%d to %d\n");</div><div>     TOOLCMP(oldParam->bEnableFastIntra, newParam->bEnableFastIntra, "fast-intra=%d to %d\n");</div><div>     TOOLCMP(oldParam->bEnableEarlySkip, newParam->bEnableEarlySkip, "early-skip=%d to %d\n");</div><div>diff --git a/source/encoder/ratecontrol.cpp b/source/encoder/ratecontrol.cpp</div><div>index d1a7d88a4..fe854a837 100644</div><div>--- a/source/encoder/ratecontrol.cpp</div><div>+++ b/source/encoder/ratecontrol.cpp</div><div>@@ -3245,8 +3245,8 @@ int RateControl::writeRateControlFrameStats(Frame* curFrame, RateControlEntry* r</div><div>         char bUsed[40];</div><div>         memset(deltaPOC, 0, sizeof(deltaPOC));</div><div>         memset(bUsed, 0, sizeof(bUsed));</div><div>-        sprintf(deltaPOC, "deltapoc:~");</div><div>-        sprintf(bUsed, "bused:~");</div><div>+        snprintf(deltaPOC, sizeof(deltaPOC), "deltapoc:~");</div><div>+        snprintf(bUsed, sizeof(bUsed), "bused:~");</div><div> </div><div>         for (i = 0; i < num; i++)</div><div>         {</div><div>diff --git a/source/encoder/weightPrediction.cpp b/source/encoder/weightPrediction.cpp</div><div>index a4a34f826..718d88284 100644</div><div>--- a/source/encoder/weightPrediction.cpp</div><div>+++ b/source/encoder/weightPrediction.cpp</div><div>@@ -516,7 +516,7 @@ void weightAnalyse(Slice& slice, Frame& frame, x265_param& param)</div><div>         int p = 0;</div><div>         bool bWeighted = false;</div><div> </div><div>-        p = sprintf(buf, "poc: %d weights:", slice.m_poc);</div><div>+        p = snprintf(buf, sizeof(buf), "poc: %d weights:", slice.m_poc);</div><div>         int numPredDir = slice.isInterP() ? 1 : 2;</div><div>         for (int list = 0; list < numPredDir; list++)</div><div>         {</div><div>@@ -524,21 +524,21 @@ void weightAnalyse(Slice& slice, Frame& frame, x265_param& param)</div><div>             if (w[0].wtPresent || w[1].wtPresent || w[2].wtPresent)</div><div>             {</div><div>                 bWeighted = true;</div><div>-                p += sprintf(buf + p, " [L%d:R0 ", list);</div><div>+                p += snprintf(buf + p, sizeof(buf) - p, " [L%d:R0 ", list);</div><div>                 if (w[0].wtPresent)</div><div>-                    p += sprintf(buf + p, "Y{%d/%d%+d}", w[0].inputWeight, 1 << w[0].log2WeightDenom, w[0].inputOffset);</div><div>+                    p += snprintf(buf + p, sizeof(buf) - p, "Y{%d/%d%+d}", w[0].inputWeight, 1 << w[0].log2WeightDenom, w[0].inputOffset);</div><div>                 if (w[1].wtPresent)</div><div>-                    p += sprintf(buf + p, "U{%d/%d%+d}", w[1].inputWeight, 1 << w[1].log2WeightDenom, w[1].inputOffset);</div><div>+                    p += snprintf(buf + p, sizeof(buf) - p, "U{%d/%d%+d}", w[1].inputWeight, 1 << w[1].log2WeightDenom, w[1].inputOffset);</div><div>                 if (w[2].wtPresent)</div><div>-                    p += sprintf(buf + p, "V{%d/%d%+d}", w[2].inputWeight, 1 << w[2].log2WeightDenom, w[2].inputOffset);</div><div>-                p += sprintf(buf + p, "]");</div><div>+                    p += snprintf(buf + p, sizeof(buf) - p, "V{%d/%d%+d}", w[2].inputWeight, 1 << w[2].log2WeightDenom, w[2].inputOffset);</div><div>+                p += snprintf(buf + p, sizeof(buf) - p, "]");</div><div>             }</div><div>         }</div><div> </div><div>         if (bWeighted)</div><div>         {</div><div>             if (p < 80) // pad with spaces to ensure progress line overwritten</div><div>-                sprintf(buf + p, "%*s", 80 - p, " ");</div><div>+                snprintf(buf + p, sizeof(buf) - p, "%*s", 80 - p, " ");</div><div>             x265_log(&param, X265_LOG_FULL, "%s\n", buf);</div><div>         }</div><div>     }</div><div>diff --git a/source/test/pixelharness.cpp b/source/test/pixelharness.cpp</div><div>index bc255eb12..4c58b9056 100644</div><div>--- a/source/test/pixelharness.cpp</div><div>+++ b/source/test/pixelharness.cpp</div><div>@@ -3203,7 +3203,7 @@ void PixelHarness::measurePartition(int part, const EncoderPrimitives& ref, cons</div><div>     ALIGN_VAR_16(int, cres[16]);</div><div>     pixel *fref = pbuf2 + 2 * INCR;</div><div>     char header[128];</div><div>-#define HEADER(str, ...) sprintf(header, str, __VA_ARGS__); printf("%22s", header);</div><div>+#define HEADER(str, ...) snprintf(header, sizeof(header), str, __VA_ARGS__); printf("%22s", header);</div><div> </div><div>     if (opt.pu[part].satd)</div><div>     {</div><div>@@ -3375,7 +3375,7 @@ void PixelHarness::measureSpeed(const EncoderPrimitives& ref, const EncoderPrimi</div><div> {</div><div>     char header[128];</div><div> </div><div>-#define HEADER(str, ...) sprintf(header, str, __VA_ARGS__); printf("%22s", header);</div><div>+#define HEADER(str, ...) snprintf(header, sizeof(header), str, __VA_ARGS__); printf("%22s", header);</div><div> #define HEADER0(str) printf("%22s", str);</div><div> </div><div>     for (int size = 4; size <= 64; size *= 2)</div><div>diff --git a/source/x265cli.cpp b/source/x265cli.cpp</div><div>index 9f55b017d..2593e1ee5 100755</div><div>--- a/source/x265cli.cpp</div><div>+++ b/source/x265cli.cpp</div><div>@@ -493,12 +493,12 @@ namespace X265_NS {</div><div>         if (framesToBeEncoded)</div><div>         {</div><div>             int eta = (int)(elapsed * (framesToBeEncoded - frameNum) / ((int64_t)frameNum * 1000000));</div><div>-            sprintf(buf, "x265 [%.1f%%] %d/%d frames, %.2f fps, %.2f kb/s, eta %d:%02d:%02d",</div><div>+            snprintf(buf, sizeof(buf), "x265 [%.1f%%] %d/%d frames, %.2f fps, %.2f kb/s, eta %d:%02d:%02d",</div><div>                 100. * frameNum / (param->chunkEnd ? param->chunkEnd : param->totalFrames), frameNum, (param->chunkEnd ? param->chunkEnd : param->totalFrames), fps, bitrate,</div><div>                 eta / 3600, (eta / 60) % 60, eta % 60);</div><div>         }</div><div>         else</div><div>-            sprintf(buf, "x265 %d frames: %.2f fps, %.2f kb/s", frameNum, fps, bitrate);</div><div>+            snprintf(buf, sizeof(buf), "x265 %d frames: %.2f fps, %.2f kb/s", frameNum, fps, bitrate);</div><div> </div><div>         fprintf(stderr, "%s  \r", buf + 5);</div><div>         SetConsoleTitle(buf);</div><div>@@ -987,12 +987,12 @@ namespace X265_NS {</div><div>             int width, height;</div><div>             getParamAspectRatio(param, width, height);</div><div>             if (width && height)</div><div>-                p += sprintf(buf + p, " sar %d:%d", width, height);</div><div>+                p += snprintf(buf + p, sizeof(buf) - p, " sar %d:%d", width, height);</div><div> </div><div>             if (framesToBeEncoded <= 0 || info[0].frameCount <= 0)</div><div>                 strcpy(buf + p, " unknown frame count");</div><div>             else</div><div>-                sprintf(buf + p, " frames %u - %d of %d", this->seek, this->seek + this->framesToBeEncoded - 1, info[0].frameCount);</div><div>+                snprintf(buf + p, sizeof(buf) - p, " frames %u - %d of %d", this->seek, this->seek + this->framesToBeEncoded - 1, info[0].frameCount);</div><div> </div><div>             for (int view = 0; view < param->numViews - !!param->format; view++)</div><div>                 general_log(param, input[view]->getName(), X265_LOG_INFO, "%s\n", buf);</div><div>-- </div><div>2.41.0.windows.1</div><div><br></div><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><b>__________________________</b></div><div><b>Karam Singh</b></div><div><b>Ph.D. IIT Guwahati</b></div><div><font size="1">Senior Software (Video Coding) Engineer  </font></div><div><font size="1">Mobile: +91 8011279030</font></div><div><font size="1">Block 9A, 6th floor, DLF Cyber City</font></div><div><font size="1">Manapakkam, Chennai 600 089</font></div></div></div></div></div></div>