diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-07-20 20:10:06 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-07-20 20:10:06 (GMT) |
commit | 68d6993ee8557df1d1a1f31ec76147b2704f0c44 (patch) | |
tree | b4349229f9340b8848c6dba11ba4dab7b1153074 | |
parent | 216559a0a69b0df8bb91006b20051801a6c745ea (diff) | |
download | tcl-68d6993ee8557df1d1a1f31ec76147b2704f0c44.zip tcl-68d6993ee8557df1d1a1f31ec76147b2704f0c44.tar.gz tcl-68d6993ee8557df1d1a1f31ec76147b2704f0c44.tar.bz2 |
More Tcl_UtfToExternalDStringEx usage, for encoding-error checking
-rw-r--r-- | generic/tclCmdAH.c | 15 |
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) { |