summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2023-07-20 20:10:06 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2023-07-20 20:10:06 (GMT)
commit68d6993ee8557df1d1a1f31ec76147b2704f0c44 (patch)
treeb4349229f9340b8848c6dba11ba4dab7b1153074
parent216559a0a69b0df8bb91006b20051801a6c745ea (diff)
downloadtcl-68d6993ee8557df1d1a1f31ec76147b2704f0c44.zip
tcl-68d6993ee8557df1d1a1f31ec76147b2704f0c44.tar.gz
tcl-68d6993ee8557df1d1a1f31ec76147b2704f0c44.tar.bz2
More Tcl_UtfToExternalDStringEx usage, for encoding-error checking
-rw-r--r--generic/tclCmdAH.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c
index 31e3a96..fb5859b 100644
--- a/generic/tclCmdAH.c
+++ b/generic/tclCmdAH.c
@@ -2239,10 +2239,16 @@ CheckAccess(
* access(). */
{
int value;
+ Tcl_DString ds;
if (Tcl_FSConvertToPathType(interp, pathPtr) != TCL_OK) {
value = 0;
+ } else if (Tcl_UtfToExternalDStringEx(NULL, NULL, TclGetString(pathPtr),
+ TCL_INDEX_NONE, 0, &ds, NULL) != TCL_OK) {
+ value = 0;
+ Tcl_DStringFree(&ds);
} else {
+ Tcl_DStringFree(&ds);
value = (Tcl_FSAccess(pathPtr, mode) == 0);
}
Tcl_SetObjResult(interp, Tcl_NewBooleanObj(value));
@@ -2280,12 +2286,19 @@ GetStatBuf(
* calling (*statProc)(). */
{
int status;
+ Tcl_DString ds;
if (Tcl_FSConvertToPathType(interp, pathPtr) != TCL_OK) {
return TCL_ERROR;
}
- status = statProc(pathPtr, statPtr);
+ if (Tcl_UtfToExternalDStringEx(NULL, NULL, TclGetString(pathPtr),
+ TCL_INDEX_NONE, 0, &ds, NULL) != TCL_OK) {
+ status = -1;
+ } else {
+ status = statProc(pathPtr, statPtr);
+ }
+ Tcl_DStringFree(&ds);
if (status < 0) {
if (interp != NULL) {