[PD-cvs] pd/src t_tkcmd.c,1.1.1.4,1.1.1.4.2.1
Mathieu Bouchard
matju at users.sourceforge.net
Mon Oct 25 17:16:17 CEST 2004
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9028
Modified Files:
Tag: devel_0_37
t_tkcmd.c
Log Message:
tcl_vmess(): fixed buffer overflow
pdgui_doevalfile(): print loadtime tcl error messages
Index: t_tkcmd.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/t_tkcmd.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.4.2.1
diff -C2 -d -r1.1.1.4 -r1.1.1.4.2.1
*** t_tkcmd.c 9 May 2003 16:03:44 -0000 1.1.1.4
--- t_tkcmd.c 25 Oct 2004 15:16:14 -0000 1.1.1.4.2.1
***************
*** 296,318 ****
}
! /* LATER should do a bounds check -- but how do you get printf to do that? */
void tcl_vmess(char *fmt, ...)
{
! int result, i;
! char buf[MAXWRITE];
va_list ap;
va_start(ap, fmt);
!
! vsprintf(buf, fmt, ap);
! result = Tcl_Eval(tk_myinterp, buf);
if (result != TCL_OK)
{
if (*tk_myinterp->result) printf("%s\n", tk_myinterp->result);
}
! va_end(ap);
}
#ifdef UNIX
void pdgui_doevalfile(Tcl_Interp *interp, char *s)
{
--- 296,325 ----
}
! /* buffer overflow handler by matju */
void tcl_vmess(char *fmt, ...)
{
! int result, n;
! char buf[MAXWRITE], *buf2=buf;
va_list ap;
va_start(ap, fmt);
! n = vsnprintf(buf, sizeof(buf), fmt, ap);
! va_end(ap);
! if (n>=(int)sizeof(buf)) {
! buf2 = malloc(n+1);
! va_start(ap, fmt);
! n = vsprintf(buf2, fmt, ap);
! va_end(ap);
! }
! result = Tcl_Eval(tk_myinterp, buf2);
if (result != TCL_OK)
{
if (*tk_myinterp->result) printf("%s\n", tk_myinterp->result);
}
! if (buf!=buf2) free(buf2);
}
#ifdef UNIX
+ /* matju's version (added error reporting) */
void pdgui_doevalfile(Tcl_Interp *interp, char *s)
{
***************
*** 320,333 ****
sprintf(buf, "set pd_guidir \"%s\"\n", pdgui_path);
tcl_mess(buf);
! strcpy(buf, pdgui_path);
! strcat(buf, "/bin/");
! strcat(buf, s);
! if (Tcl_EvalFile(interp, buf) != TCL_OK)
! {
! char buf2[1000];
! sprintf(buf2, "puts [concat tcl: %s: can't open script]\n",
! buf);
! tcl_mess(buf2);
! }
}
--- 327,333 ----
sprintf(buf, "set pd_guidir \"%s\"\n", pdgui_path);
tcl_mess(buf);
! sprintf(buf, "source %s/bin/%s",pdgui_path,s);
! if (Tcl_Eval(interp, buf) != TCL_OK)
! Tcl_Eval(tk_myinterp, "global errorInfo; puts stderr \"Tcl Error: $errorInfo\"");
}
More information about the Pd-cvs
mailing list