summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2023-03-30 15:19:44 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2023-03-30 15:19:44 (GMT)
commit191fecdc87592dfea94718bc716551c72f072c33 (patch)
tree4aa12b60fc6ad7ca4c19658d774dee4326ad165b /generic
parent784535a35c779f46886fe9a880b706c979efdd77 (diff)
downloadtcl-191fecdc87592dfea94718bc716551c72f072c33.zip
tcl-191fecdc87592dfea94718bc716551c72f072c33.tar.gz
tcl-191fecdc87592dfea94718bc716551c72f072c33.tar.bz2
Fix [0cb3554903]: macOS 13 SDK deprecates sprintf(). But better not use it on other platforms either.
Diffstat (limited to 'generic')
-rw-r--r--generic/regcomp.c4
-rw-r--r--generic/regerror.c6
-rw-r--r--generic/tcl.h2
-rw-r--r--generic/tclBasic.c4
-rw-r--r--generic/tclCkalloc.c2
-rw-r--r--generic/tclClock.c6
-rw-r--r--generic/tclCompCmdsSZ.c6
-rw-r--r--generic/tclCompile.h2
-rw-r--r--generic/tclDisassemble.c20
-rw-r--r--generic/tclHash.c8
-rw-r--r--generic/tclIO.c12
-rw-r--r--generic/tclIORChan.c2
-rw-r--r--generic/tclInt.h1
-rw-r--r--generic/tclInterp.c2
-rw-r--r--generic/tclLiteral.c8
-rw-r--r--generic/tclOO.c2
-rw-r--r--generic/tclObj.c8
-rw-r--r--generic/tclPipe.c4
-rw-r--r--generic/tclRegexp.c2
-rw-r--r--generic/tclStrToD.c2
-rw-r--r--generic/tclStringObj.c6
-rw-r--r--generic/tclTest.c54
-rw-r--r--generic/tclTestObj.c2
-rw-r--r--generic/tclTestProcBodyObj.c4
-rw-r--r--generic/tclThreadAlloc.c4
-rw-r--r--generic/tclThreadTest.c4
-rw-r--r--generic/tclUtil.c4
-rw-r--r--generic/tclZlib.c6
28 files changed, 95 insertions, 92 deletions
diff --git a/generic/regcomp.c b/generic/regcomp.c
index d828b44..1d13876 100644
--- a/generic/regcomp.c
+++ b/generic/regcomp.c
@@ -2186,9 +2186,9 @@ stid(
return "unable";
}
if (t->id != 0) {
- sprintf(buf, "%d", t->id);
+ snprintf(buf, bufsize, "%d", t->id);
} else {
- sprintf(buf, "%p", t);
+ snprintf(buf, bufsize, "%p", t);
}
return buf;
}
diff --git a/generic/regerror.c b/generic/regerror.c
index f783217..361bd29 100644
--- a/generic/regerror.c
+++ b/generic/regerror.c
@@ -74,7 +74,7 @@ regerror(
break;
}
}
- sprintf(convbuf, "%d", r->code); /* -1 for unknown */
+ snprintf(convbuf, sizeof(convbuf), "%d", r->code); /* -1 for unknown */
msg = convbuf;
break;
case REG_ITOA: /* Convert number to name */
@@ -87,7 +87,7 @@ regerror(
if (r->code >= 0) {
msg = r->name;
} else { /* Unknown; tell him the number */
- sprintf(convbuf, "REG_%u", (unsigned)icode);
+ snprintf(convbuf, sizeof(convbuf), "REG_%u", (unsigned)icode);
msg = convbuf;
}
break;
@@ -100,7 +100,7 @@ regerror(
if (r->code >= 0) {
msg = r->explain;
} else { /* Unknown; say so */
- sprintf(convbuf, unk, code);
+ snprintf(convbuf, sizeof(convbuf), unk, code);
msg = convbuf;
}
break;
diff --git a/generic/tcl.h b/generic/tcl.h
index 8b7c4ed..942ca72 100644
--- a/generic/tcl.h
+++ b/generic/tcl.h
@@ -393,7 +393,7 @@ typedef long LONG;
*
* Note on converting between Tcl_WideInt and strings. This implementation (in
* tclObj.c) depends on the function
- * sprintf(...,"%" TCL_LL_MODIFIER "d",...).
+ * snprintf(...,"%" TCL_LL_MODIFIER "d",...).
*/
#if !defined(TCL_WIDE_INT_TYPE)&&!defined(TCL_WIDE_INT_IS_LONG)
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index e075701..63e7d75 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -1090,7 +1090,7 @@ Tcl_CallWhenDeleted(
AssocData *dPtr = (AssocData *)ckalloc(sizeof(AssocData));
Tcl_HashEntry *hPtr;
- sprintf(buffer, "Assoc Data Key #%d", *assocDataCounterPtr);
+ snprintf(buffer, sizeof(buffer), "Assoc Data Key #%d", *assocDataCounterPtr);
(*assocDataCounterPtr)++;
if (iPtr->assocData == NULL) {
@@ -6348,7 +6348,7 @@ ProcessUnexpectedResult(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"command returned bad code: %d", returnCode));
}
- sprintf(buf, "%d", returnCode);
+ snprintf(buf, sizeof(buf), "%d", returnCode);
Tcl_SetErrorCode(interp, "TCL", "UNEXPECTED_RESULT_CODE", buf, NULL);
}
diff --git a/generic/tclCkalloc.c b/generic/tclCkalloc.c
index 20285eb..986798d 100644
--- a/generic/tclCkalloc.c
+++ b/generic/tclCkalloc.c
@@ -183,7 +183,7 @@ TclDumpMemoryInfo(
if (clientData == NULL) {
return 0;
}
- sprintf(buf,
+ snprintf(buf, sizeof(buf),
"total mallocs %10d\n"
"total frees %10d\n"
"current packets allocated %10d\n"
diff --git a/generic/tclClock.c b/generic/tclClock.c
index 13a5c65..d379762 100644
--- a/generic/tclClock.c
+++ b/generic/tclClock.c
@@ -1105,12 +1105,12 @@ ConvertUTCToLocalUsingC(
} else {
*buffer = '+';
}
- sprintf(buffer+1, "%02d", diff / 3600);
+ snprintf(buffer+1, sizeof(buffer) - 1, "%02d", diff / 3600);
diff %= 3600;
- sprintf(buffer+3, "%02d", diff / 60);
+ snprintf(buffer+3, sizeof(buffer) - 3, "%02d", diff / 60);
diff %= 60;
if (diff > 0) {
- sprintf(buffer+5, "%02d", diff);
+ snprintf(buffer+5, sizeof(buffer) - 5, "%02d", diff);
}
fields->tzName = Tcl_NewStringObj(buffer, -1);
Tcl_IncrRefCount(fields->tzName);
diff --git a/generic/tclCompCmdsSZ.c b/generic/tclCompCmdsSZ.c
index db01dcd..5c2a0b6 100644
--- a/generic/tclCompCmdsSZ.c
+++ b/generic/tclCompCmdsSZ.c
@@ -837,7 +837,7 @@ TclCompileStringLenCmd(
char buf[TCL_INTEGER_SPACE];
int len = Tcl_GetCharLength(objPtr);
- len = sprintf(buf, "%d", len);
+ len = snprintf(buf, sizeof(buf), "%d", len);
PushLiteral(envPtr, buf, len);
} else {
SetLineInformation(1);
@@ -3073,7 +3073,7 @@ IssueTryClausesInstructions(
for (i=0 ; i<numHandlers ; i++) {
noError[i] = -1;
- sprintf(buf, "%d", matchCodes[i]);
+ snprintf(buf, sizeof(buf), "%d", matchCodes[i]);
OP( DUP);
PushLiteral(envPtr, buf, strlen(buf));
OP( EQ);
@@ -3285,7 +3285,7 @@ IssueTryClausesFinallyInstructions(
int noTrapError, trapError;
const char *p;
- sprintf(buf, "%d", matchCodes[i]);
+ snprintf(buf, sizeof(buf), "%d", matchCodes[i]);
OP( DUP);
PushLiteral(envPtr, buf, strlen(buf));
OP( EQ);
diff --git a/generic/tclCompile.h b/generic/tclCompile.h
index 997f08e..bf814e8 100644
--- a/generic/tclCompile.h
+++ b/generic/tclCompile.h
@@ -1841,7 +1841,7 @@ MODULE_SCOPE void TclDTraceInfo(Tcl_Obj *info, const char **args, int *argsi);
FILE *tclDTraceDebugLog = NULL; \
void TclDTraceOpenDebugLog(void) { \
char n[35]; \
- sprintf(n, "/tmp/tclDTraceDebug-%lu.log", \
+ snprintf(n, sizeof(n), "/tmp/tclDTraceDebug-%lu.log", \
(unsigned long) getpid()); \
tclDTraceDebugLog = fopen(n, "a"); \
}
diff --git a/generic/tclDisassemble.c b/generic/tclDisassemble.c
index 4a61f69..4cae594 100644
--- a/generic/tclDisassemble.c
+++ b/generic/tclDisassemble.c
@@ -267,8 +267,8 @@ DisassembleByteCodeObj(
* Print header lines describing the ByteCode.
*/
- sprintf(ptrBuf1, "%p", codePtr);
- sprintf(ptrBuf2, "%p", iPtr);
+ snprintf(ptrBuf1, sizeof(ptrBuf1), "%p", codePtr);
+ snprintf(ptrBuf2, sizeof(ptrBuf1), "%p", iPtr);
Tcl_AppendPrintfToObj(bufferObj,
"ByteCode 0x%s, refCt %u, epoch %u, interp 0x%s (epoch %u)\n",
ptrBuf1, codePtr->refCount, codePtr->compileEpoch, ptrBuf2,
@@ -314,7 +314,7 @@ DisassembleByteCodeObj(
Proc *procPtr = codePtr->procPtr;
int numCompiledLocals = procPtr->numCompiledLocals;
- sprintf(ptrBuf1, "%p", procPtr);
+ snprintf(ptrBuf1, sizeof(ptrBuf1), "%p", procPtr);
Tcl_AppendPrintfToObj(bufferObj,
" Proc 0x%s, refCt %d, args %d, compiled locals %d\n",
ptrBuf1, procPtr->refCount, procPtr->numArgs,
@@ -564,22 +564,22 @@ FormatInstruction(
case OPERAND_UINT4:
opnd = TclGetUInt4AtPtr(pc+numBytes); numBytes += 4;
if (opCode == INST_START_CMD) {
- sprintf(suffixBuffer+strlen(suffixBuffer),
+ snprintf(suffixBuffer+strlen(suffixBuffer), sizeof(suffixBuffer) - strlen(suffixBuffer),
", %u cmds start here", opnd);
}
Tcl_AppendPrintfToObj(bufferObj, "%u ", (unsigned) opnd);
break;
case OPERAND_OFFSET1:
opnd = TclGetInt1AtPtr(pc+numBytes); numBytes++;
- sprintf(suffixBuffer, "pc %u", pcOffset+opnd);
+ snprintf(suffixBuffer, sizeof(suffixBuffer), "pc %u", pcOffset+opnd);
Tcl_AppendPrintfToObj(bufferObj, "%+d ", opnd);
break;
case OPERAND_OFFSET4:
opnd = TclGetInt4AtPtr(pc+numBytes); numBytes += 4;
if (opCode == INST_START_CMD) {
- sprintf(suffixBuffer, "next cmd at pc %u", pcOffset+opnd);
+ snprintf(suffixBuffer, sizeof(suffixBuffer), "next cmd at pc %u", pcOffset+opnd);
} else {
- sprintf(suffixBuffer, "pc %u", pcOffset+opnd);
+ snprintf(suffixBuffer, sizeof(suffixBuffer), "pc %u", pcOffset+opnd);
}
Tcl_AppendPrintfToObj(bufferObj, "%+d ", opnd);
break;
@@ -625,9 +625,9 @@ FormatInstruction(
localPtr = localPtr->nextPtr;
}
if (TclIsVarTemporary(localPtr)) {
- sprintf(suffixBuffer, "temp var %u", (unsigned) opnd);
+ snprintf(suffixBuffer, sizeof(suffixBuffer), "temp var %u", (unsigned) opnd);
} else {
- sprintf(suffixBuffer, "var ");
+ snprintf(suffixBuffer, sizeof(suffixBuffer), "var ");
suffixSrc = localPtr->name;
}
}
@@ -827,7 +827,7 @@ UpdateStringOfInstName(
int len;
if ((inst < 0) || (inst > LAST_INST_OPCODE)) {
- sprintf(buf, "inst_%d", inst);
+ snprintf(buf, sizeof(buf), "inst_%d", inst);
s = buf;
} else {
s = (char *) tclInstructionTable[objPtr->internalRep.longValue].name;
diff --git a/generic/tclHash.c b/generic/tclHash.c
index 709831d..f4b0a47 100644
--- a/generic/tclHash.c
+++ b/generic/tclHash.c
@@ -678,18 +678,18 @@ Tcl_HashStats(
*/
result = ckalloc((NUM_COUNTERS * 60) + 300);
- sprintf(result, "%d entries in table, %d buckets\n",
+ snprintf(result, 60, "%d entries in table, %d buckets\n",
tablePtr->numEntries, tablePtr->numBuckets);
p = result + strlen(result);
for (i = 0; i < NUM_COUNTERS; i++) {
- sprintf(p, "number of buckets with %d entries: %d\n",
+ snprintf(p, 60, "number of buckets with %d entries: %d\n",
i, count[i]);
p += strlen(p);
}
- sprintf(p, "number of buckets with %d or more entries: %d\n",
+ snprintf(p, 60, "number of buckets with %d or more entries: %d\n",
NUM_COUNTERS, overflow);
p += strlen(p);
- sprintf(p, "average search distance for entry: %.1f", average);
+ snprintf(p, 60, "average search distance for entry: %.1f", average);
return result;
}
diff --git a/generic/tclIO.c b/generic/tclIO.c
index 55b6bdc..b9223d9 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -7752,7 +7752,7 @@ Tcl_GetChannelOption(
Tcl_DString *dsPtr) /* Where to store value(s). */
{
size_t len; /* Length of optionName string. */
- char optionVal[128]; /* Buffer for sprintf. */
+ char optionVal[128]; /* Buffer for snprintf. */
Channel *chanPtr = (Channel *) chan;
ChannelState *statePtr = chanPtr->state;
/* State info for channel */
@@ -7859,9 +7859,10 @@ Tcl_GetChannelOption(
if (statePtr->inEofChar == 0) {
Tcl_DStringAppendElement(dsPtr, "");
} else {
- char buf[4];
+ char buf[2];
- sprintf(buf, "%c", statePtr->inEofChar);
+ buf[1] = '\0';
+ buf[0] = statePtr->inEofChar;
Tcl_DStringAppendElement(dsPtr, buf);
}
}
@@ -7869,9 +7870,10 @@ Tcl_GetChannelOption(
if (statePtr->outEofChar == 0) {
Tcl_DStringAppendElement(dsPtr, "");
} else {
- char buf[4];
+ char buf[2];
- sprintf(buf, "%c", statePtr->outEofChar);
+ buf[1] = '\0';
+ buf[0] = statePtr->outEofChar;
Tcl_DStringAppendElement(dsPtr, buf);
}
}
diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c
index 482b0d5..c43cde8 100644
--- a/generic/tclIORChan.c
+++ b/generic/tclIORChan.c
@@ -3209,7 +3209,7 @@ ForwardProc(
*/
char *buf = (char *)ckalloc(200);
- sprintf(buf,
+ snprintf(buf, 200,
"{Expected list with even number of elements, got %d %s instead}",
listc, (listc == 1 ? "element" : "elements"));
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 3fa9a11..0a48039 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -121,6 +121,7 @@ typedef int ptrdiff_t;
#if defined(_WIN32) && defined(_MSC_VER)
# define vsnprintf _vsnprintf
+# define snprintf _snprintf
#endif
/*
diff --git a/generic/tclInterp.c b/generic/tclInterp.c
index 3ba27a1..62feaf1 100644
--- a/generic/tclInterp.c
+++ b/generic/tclInterp.c
@@ -803,7 +803,7 @@ NRInterpCmd(
for (i = 0; ; i++) {
Tcl_CmdInfo cmdInfo;
- sprintf(buf, "interp%d", i);
+ snprintf(buf, sizeof(buf), "interp%d", i);
if (Tcl_GetCommandInfo(interp, buf, &cmdInfo) == 0) {
break;
}
diff --git a/generic/tclLiteral.c b/generic/tclLiteral.c
index 35c54be..5dab6d1 100644
--- a/generic/tclLiteral.c
+++ b/generic/tclLiteral.c
@@ -1120,18 +1120,18 @@ TclLiteralStats(
*/
result = (char *)ckalloc(NUM_COUNTERS*60 + 300);
- sprintf(result, "%d entries in table, %d buckets\n",
+ snprintf(result, 60, "%d entries in table, %d buckets\n",
tablePtr->numEntries, tablePtr->numBuckets);
p = result + strlen(result);
for (i=0 ; i<NUM_COUNTERS ; i++) {
- sprintf(p, "number of buckets with %d entries: %d\n",
+ snprintf(p, 60, "number of buckets with %d entries: %d\n",
i, count[i]);
p += strlen(p);
}
- sprintf(p, "number of buckets with %d or more entries: %d\n",
+ snprintf(p, 60, "number of buckets with %d or more entries: %d\n",
NUM_COUNTERS, overflow);
p += strlen(p);
- sprintf(p, "average search distance for entry: %.1f", average);
+ snprintf(p, 60, "average search distance for entry: %.1f", average);
return result;
}
#endif /*TCL_COMPILE_STATS*/
diff --git a/generic/tclOO.c b/generic/tclOO.c
index 043aa4c..b28efd8 100644
--- a/generic/tclOO.c
+++ b/generic/tclOO.c
@@ -661,7 +661,7 @@ AllocObject(
while (1) {
char objName[10 + TCL_INTEGER_SPACE];
- sprintf(objName, "::oo::Obj%d", ++fPtr->tsdPtr->nsCount);
+ snprintf(objName, sizeof(objName), "::oo::Obj%d", ++fPtr->tsdPtr->nsCount);
oPtr->namespacePtr = Tcl_CreateNamespace(interp, objName, oPtr, NULL);
if (oPtr->namespacePtr != NULL) {
creationEpoch = fPtr->tsdPtr->nsCount;
diff --git a/generic/tclObj.c b/generic/tclObj.c
index 0fce557..fde12f6 100644
--- a/generic/tclObj.c
+++ b/generic/tclObj.c
@@ -2877,13 +2877,13 @@ UpdateStringOfWideInt(
Tcl_WideInt wideVal = objPtr->internalRep.wideValue;
/*
- * Note that sprintf will generate a compiler warning under Mingw claiming
+ * Note that snprintf will generate a compiler warning under Mingw claiming
* %I64 is an unknown format specifier. Just ignore this warning. We can't
* use %L as the format specifier since that gets printed as a 32 bit
* value.
*/
- sprintf(buffer, "%" TCL_LL_MODIFIER "d", wideVal);
+ snprintf(buffer, sizeof(buffer), "%" TCL_LL_MODIFIER "d", wideVal);
len = strlen(buffer);
objPtr->bytes = (char *)ckalloc(len + 1);
memcpy(objPtr->bytes, buffer, len + 1);
@@ -4496,7 +4496,7 @@ Tcl_RepresentationCmd(
* "1872361827361287"
*/
- sprintf(ptrBuffer, "%p", (void *) objv[1]);
+ snprintf(ptrBuffer, sizeof(ptrBuffer), "%p", (void *) objv[1]);
descObj = Tcl_ObjPrintf("value is a %s with a refcount of %d,"
" object pointer at %s",
objv[1]->typePtr ? objv[1]->typePtr->name : "pure string",
@@ -4521,7 +4521,7 @@ Tcl_RepresentationCmd(
objv[1]->internalRep.twoPtrValue.ptr2 = NULL;
}
if (objv[1]->typePtr) {
- sprintf(ptrBuffer, "%p:%p",
+ snprintf(ptrBuffer, sizeof(ptrBuffer), "%p:%p",
(void *) objv[1]->internalRep.twoPtrValue.ptr1,
(void *) objv[1]->internalRep.twoPtrValue.ptr2);
Tcl_AppendPrintfToObj(descObj, ", internal representation %s",
diff --git a/generic/tclPipe.c b/generic/tclPipe.c
index f5c82f1..9bb8997 100644
--- a/generic/tclPipe.c
+++ b/generic/tclPipe.c
@@ -323,10 +323,10 @@ TclCleanupChildren(
char msg1[TCL_INTEGER_SPACE], msg2[TCL_INTEGER_SPACE];
result = TCL_ERROR;
- sprintf(msg1, "%lu", resolvedPid);
+ snprintf(msg1, sizeof(msg1), "%lu", resolvedPid);
if (WIFEXITED(waitStatus)) {
if (interp != NULL) {
- sprintf(msg2, "%u", WEXITSTATUS(waitStatus));
+ snprintf(msg2, sizeof(msg2), "%u", WEXITSTATUS(waitStatus));
Tcl_SetErrorCode(interp, "CHILDSTATUS", msg1, msg2, NULL);
}
abnormalExit = 1;
diff --git a/generic/tclRegexp.c b/generic/tclRegexp.c
index bd923ba..3259b48 100644
--- a/generic/tclRegexp.c
+++ b/generic/tclRegexp.c
@@ -730,7 +730,7 @@ TclRegError(
p = (n > sizeof(buf)) ? "..." : "";
Tcl_SetObjResult(interp, Tcl_ObjPrintf("%s%s%s", msg, buf, p));
- sprintf(cbuf, "%d", status);
+ snprintf(cbuf, sizeof(cbuf), "%d", status);
(void) TclReError(REG_ITOA, cbuf, sizeof(cbuf));
Tcl_SetErrorCode(interp, "REGEXP", cbuf, buf, NULL);
}
diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c
index c55554c..fd3170a 100644
--- a/generic/tclStrToD.c
+++ b/generic/tclStrToD.c
@@ -5145,7 +5145,7 @@ TclFormatNaN(
*buffer++ = 'N';
bitwhack.iv &= (((Tcl_WideUInt) 1) << 51) - 1;
if (bitwhack.iv != 0) {
- sprintf(buffer, "(%" TCL_LL_MODIFIER "x)", bitwhack.iv);
+ snprintf(buffer, TCL_DOUBLE_SPACE, "(%" TCL_LL_MODIFIER "x)", bitwhack.iv);
} else {
*buffer = '\0';
}
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index 720ed44..b42eeb3 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -2483,14 +2483,14 @@ Tcl_AppendFormatToObj(
*p++ = '+';
}
if (width) {
- p += sprintf(p, "%d", width);
+ p += snprintf(p, TCL_INTEGER_SPACE, "%d", width);
if (width > length) {
length = width;
}
}
if (gotPrecision) {
*p++ = '.';
- p += sprintf(p, "%d", precision);
+ p += snprintf(p, TCL_INTEGER_SPACE, "%d", precision);
if (precision > INT_MAX - length) {
msg = overflow;
errCode = "OVERFLOW";
@@ -2514,7 +2514,7 @@ Tcl_AppendFormatToObj(
goto errorMsg;
}
bytes = TclGetString(segment);
- if (!Tcl_AttemptSetObjLength(segment, sprintf(bytes, spec, d))) {
+ if (!Tcl_AttemptSetObjLength(segment, snprintf(bytes, segment->length, spec, d))) {
msg = overflow;
errCode = "OVERFLOW";
goto errorMsg;
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 2b4b24f..e7af185 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -1110,7 +1110,7 @@ TestcmdtokenCmd(
if (strcmp(argv[1], "create") == 0) {
token = Tcl_CreateCommand(interp, argv[2], CmdProc1,
(ClientData) "original", NULL);
- sprintf(buf, "%p", (void *)token);
+ snprintf(buf, sizeof(buf), "%p", (void *)token);
Tcl_SetResult(interp, buf, TCL_VOLATILE);
} else if (strcmp(argv[1], "name") == 0) {
Tcl_Obj *objPtr;
@@ -1864,6 +1864,19 @@ static int UtfExtWrapper(
int flags;
Tcl_Obj **flagObjs;
int nflags;
+ static const struct {
+ const char *flagKey;
+ int flag;
+ } flagMap[] = {
+ {"start", TCL_ENCODING_START},
+ {"end", TCL_ENCODING_END},
+ {"stoponerror", TCL_ENCODING_STOPONERROR},
+ {"noterminate", TCL_ENCODING_NO_TERMINATE},
+ {"charlimit", TCL_ENCODING_CHAR_LIMIT},
+ {NULL, 0}
+ };
+ int i;
+ Tcl_WideInt wide;
if (objc < 7 || objc > 10) {
Tcl_WrongNumArgs(interp,
@@ -1882,18 +1895,6 @@ static int UtfExtWrapper(
return TCL_ERROR;
}
- struct {
- const char *flagKey;
- int flag;
- } flagMap[] = {
- {"start", TCL_ENCODING_START},
- {"end", TCL_ENCODING_END},
- {"stoponerror", TCL_ENCODING_STOPONERROR},
- {"noterminate", TCL_ENCODING_NO_TERMINATE},
- {"charlimit", TCL_ENCODING_CHAR_LIMIT},
- {NULL, 0}
- };
- int i;
for (i = 0; i < nflags; ++i) {
int flag;
if (Tcl_GetIntFromObj(NULL, flagObjs[i], &flag) == TCL_OK) {
@@ -1914,7 +1915,6 @@ static int UtfExtWrapper(
}
/* Assumes state is integer if not "" */
- Tcl_WideInt wide;
if (Tcl_GetWideIntFromObj(interp, objv[5], &wide) == TCL_OK) {
encState = (Tcl_EncodingState)(size_t)wide;
encStatePtr = &encState;
@@ -2538,7 +2538,7 @@ ExitProcOdd(
char buf[16 + TCL_INTEGER_SPACE];
int len;
- sprintf(buf, "odd %d\n", (int)PTR2INT(clientData));
+ snprintf(buf, sizeof(buf), "odd %d\n", (int)PTR2INT(clientData));
len = strlen(buf);
if (len != (int) write(1, buf, len)) {
Tcl_Panic("ExitProcOdd: unable to write to stdout");
@@ -2552,7 +2552,7 @@ ExitProcEven(
char buf[16 + TCL_INTEGER_SPACE];
int len;
- sprintf(buf, "even %d\n", (int)PTR2INT(clientData));
+ snprintf(buf, sizeof(buf), "even %d\n", (int)PTR2INT(clientData));
len = strlen(buf);
if (len != (int) write(1, buf, len)) {
Tcl_Panic("ExitProcEven: unable to write to stdout");
@@ -2597,7 +2597,7 @@ TestexprlongCmd(
if (result != TCL_OK) {
return result;
}
- sprintf(buf, ": %ld", exprResult);
+ snprintf(buf, sizeof(buf), ": %ld", exprResult);
Tcl_AppendResult(interp, buf, NULL);
return TCL_OK;
}
@@ -2639,7 +2639,7 @@ TestexprlongobjCmd(
if (result != TCL_OK) {
return result;
}
- sprintf(buf, ": %ld", exprResult);
+ snprintf(buf, sizeof(buf), ": %ld", exprResult);
Tcl_AppendResult(interp, buf, NULL);
return TCL_OK;
}
@@ -4089,7 +4089,7 @@ TestregexpObjCmd(
varName = Tcl_GetString(objv[2]);
TclRegExpRangeUniChar(regExpr, -1, &start, &end);
- sprintf(resinfo, "%d %d", start, end-1);
+ snprintf(resinfo, sizeof(resinfo), "%d %d", start, end-1);
value = Tcl_SetVar(interp, varName, resinfo, 0);
if (value == NULL) {
Tcl_AppendResult(interp, "couldn't set variable \"",
@@ -4103,7 +4103,7 @@ TestregexpObjCmd(
Tcl_RegExpGetInfo(regExpr, &info);
varName = Tcl_GetString(objv[2]);
- sprintf(resinfo, "%ld", info.extendStart);
+ snprintf(resinfo, sizeof(resinfo), "%ld", info.extendStart);
value = Tcl_SetVar(interp, varName, resinfo, 0);
if (value == NULL) {
Tcl_AppendResult(interp, "couldn't set variable \"",
@@ -4998,15 +4998,15 @@ GetTimesObjCmd(
fprintf(stderr, " %.3f usec per Tcl_GetInt of \"12345\"\n",
timePer/100000);
- /* sprintf 100000 times */
- fprintf(stderr, "sprintf of 12345 100000 times\n");
+ /* snprintf 100000 times */
+ fprintf(stderr, "snprintf of 12345 100000 times\n");
Tcl_GetTime(&start);
for (i = 0; i < 100000; i++) {
- sprintf(newString, "%d", 12345);
+ snprintf(newString, sizeof(newString), "%d", 12345);
}
Tcl_GetTime(&stop);
timePer = (stop.sec - start.sec)*1000000 + (stop.usec - start.usec);
- fprintf(stderr, " %.3f usec per sprintf of 12345\n",
+ fprintf(stderr, " %.3f usec per snprintf of 12345\n",
timePer/100000);
/* hashtable lookup 100000 times */
@@ -5642,7 +5642,7 @@ TestChannelCmd(
Tcl_Channel chan; /* The opaque type. */
size_t len; /* Length of subcommand string. */
int IOQueued; /* How much IO is queued inside channel? */
- char buf[TCL_INTEGER_SPACE];/* For sprintf. */
+ char buf[TCL_INTEGER_SPACE];/* For snprintf. */
int mode; /* rw mode of the channel */
if (argc < 2) {
@@ -6432,10 +6432,10 @@ TestGetIndexFromObjStructObjCmd(
}
if (idx != target) {
char buffer[64];
- sprintf(buffer, "%d", idx);
+ snprintf(buffer, sizeof(buffer), "%d", idx);
Tcl_AppendResult(interp, "index value comparison failed: got ",
buffer, NULL);
- sprintf(buffer, "%d", target);
+ snprintf(buffer, sizeof(buffer), "%d", target);
Tcl_AppendResult(interp, " when ", buffer, " expected", NULL);
return TCL_ERROR;
}
diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c
index b1a0afa..8d8c0c8 100644
--- a/generic/tclTestObj.c
+++ b/generic/tclTestObj.c
@@ -1535,7 +1535,7 @@ CheckIfVarUnset(
if (varPtr[varIndex] == NULL) {
char buf[32 + TCL_INTEGER_SPACE];
- sprintf(buf, "variable %d is unset (NULL)", varIndex);
+ snprintf(buf, sizeof(buf), "variable %d is unset (NULL)", varIndex);
Tcl_ResetResult(interp);
Tcl_AppendToObj(Tcl_GetObjResult(interp), buf, -1);
return 1;
diff --git a/generic/tclTestProcBodyObj.c b/generic/tclTestProcBodyObj.c
index fba2844..45dea21 100644
--- a/generic/tclTestProcBodyObj.c
+++ b/generic/tclTestProcBodyObj.c
@@ -146,14 +146,14 @@ RegisterCommand(
char buf[128];
if (cmdTablePtr->exportIt) {
- sprintf(buf, "namespace eval %s { namespace export %s }",
+ snprintf(buf, sizeof(buf), "namespace eval %s { namespace export %s }",
namespace, cmdTablePtr->cmdName);
if (Tcl_EvalEx(interp, buf, -1, 0) != TCL_OK) {
return TCL_ERROR;
}
}
- sprintf(buf, "%s::%s", namespace, cmdTablePtr->cmdName);
+ snprintf(buf, sizeof(buf), "%s::%s", namespace, cmdTablePtr->cmdName);
Tcl_CreateObjCommand(interp, buf, cmdTablePtr->proc, 0, 0);
return TCL_OK;
}
diff --git a/generic/tclThreadAlloc.c b/generic/tclThreadAlloc.c
index 5a1e8ca..33dc480 100644
--- a/generic/tclThreadAlloc.c
+++ b/generic/tclThreadAlloc.c
@@ -676,11 +676,11 @@ Tcl_GetMemoryInfo(
if (cachePtr == sharedPtr) {
Tcl_DStringAppendElement(dsPtr, "shared");
} else {
- sprintf(buf, "thread%p", cachePtr->owner);
+ snprintf(buf, sizeof(buf), "thread%p", cachePtr->owner);
Tcl_DStringAppendElement(dsPtr, buf);
}
for (n = 0; n < NBUCKETS; ++n) {
- sprintf(buf, "%lu %ld %ld %ld %ld %ld %ld",
+ snprintf(buf, sizeof(buf), "%lu %ld %ld %ld %ld %ld %ld",
(unsigned long) bucketInfo[n].blockSize,
cachePtr->buckets[n].numFree,
cachePtr->buckets[n].numRemoves,
diff --git a/generic/tclThreadTest.c b/generic/tclThreadTest.c
index ff18077..4493822 100644
--- a/generic/tclThreadTest.c
+++ b/generic/tclThreadTest.c
@@ -371,7 +371,7 @@ ThreadObjCmd(
} else {
char buf[20];
- sprintf(buf, "%" TCL_LL_MODIFIER "d", id);
+ snprintf(buf, sizeof(buf), "%" TCL_LL_MODIFIER "d", id);
Tcl_AppendResult(interp, "cannot join thread ", buf, NULL);
}
return result;
@@ -654,7 +654,7 @@ ThreadErrorProc(
char *script;
char buf[TCL_DOUBLE_SPACE+1];
- sprintf(buf, "%" TCL_LL_MODIFIER "d", (Tcl_WideInt)(size_t)Tcl_GetCurrentThread());
+ snprintf(buf, sizeof(buf), "%" TCL_LL_MODIFIER "d", (Tcl_WideInt)(size_t)Tcl_GetCurrentThread());
errorInfo = Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY);
if (errorProcString == NULL) {
diff --git a/generic/tclUtil.c b/generic/tclUtil.c
index aee2b15..d3e88d4 100644
--- a/generic/tclUtil.c
+++ b/generic/tclUtil.c
@@ -3320,9 +3320,9 @@ Tcl_PrintDouble(
*/
if (*precisionPtr == 0) {
- sprintf(dst, "e%+d", exponent);
+ snprintf(dst, TCL_DOUBLE_SPACE, "e%+d", exponent);
} else {
- sprintf(dst, "e%+03d", exponent);
+ snprintf(dst, TCL_DOUBLE_SPACE, "e%+03d", exponent);
}
} else {
/*
diff --git a/generic/tclZlib.c b/generic/tclZlib.c
index cbff7b7..c9b4cbc 100644
--- a/generic/tclZlib.c
+++ b/generic/tclZlib.c
@@ -289,7 +289,7 @@ ConvertError(
case Z_NEED_DICT:
codeStr = "NEED_DICT";
codeStr2 = codeStrBuf;
- sprintf(codeStrBuf, "%lu", adler);
+ snprintf(codeStrBuf, sizeof(codeStrBuf), "%lu", adler);
break;
/*
@@ -310,7 +310,7 @@ ConvertError(
default:
codeStr = "UNKNOWN";
codeStr2 = codeStrBuf;
- sprintf(codeStrBuf, "%d", code);
+ snprintf(codeStrBuf, sizeof(codeStrBuf), "%d", code);
break;
}
Tcl_SetObjResult(interp, Tcl_NewStringObj(zError(code), -1));
@@ -3419,7 +3419,7 @@ ZlibTransformGetOption(
crc = cd->inStream.adler;
}
- sprintf(buf, "%lu", crc);
+ snprintf(buf, sizeof(buf), "%lu", crc);
if (optionName == NULL) {
Tcl_DStringAppendElement(dsPtr, "-checksum");
Tcl_DStringAppendElement(dsPtr, buf);