You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
4.5 KiB
155 lines
4.5 KiB
Patch by Sergei Golovan fixes several cases of access beyond array boundaries.
|
|
|
|
--- a/generic/jkFilterIIR.c
|
|
+++ b/generic/jkFilterIIR.c
|
|
@@ -125,6 +125,12 @@
|
|
return TCL_ERROR;
|
|
}
|
|
|
|
+ if (arg + 1 == objc) {
|
|
+ Tcl_AppendResult(interp, "No argument given for ",
|
|
+ optionStrings[index], " option", (char *) NULL);
|
|
+ return TCL_ERROR;
|
|
+ }
|
|
+
|
|
switch ((enum options) index) {
|
|
/* size of triangular dithering on output */
|
|
case DITHER:
|
|
--- a/generic/jkPitchCmd.c
|
|
+++ b/generic/jkPitchCmd.c
|
|
@@ -850,7 +850,7 @@
|
|
|
|
for (arg = 2; arg < objc; arg += 2) {
|
|
char *opt = Tcl_GetStringFromObj(objv[arg], NULL);
|
|
- char *val = Tcl_GetStringFromObj(objv[arg+1], NULL);
|
|
+ char *val = (arg + 1 == objc) ? "" : Tcl_GetStringFromObj(objv[arg+1], NULL);
|
|
|
|
if ((strcmp("-method", opt) == 0) && (strcasecmp("esps", val) == 0)) {
|
|
Get_f0(s, interp, objc, objv);
|
|
--- a/generic/jkSoundEdit.c
|
|
+++ b/generic/jkSoundEdit.c
|
|
@@ -291,6 +291,12 @@
|
|
string = Tcl_GetStringFromObj(objv[arg], &len);
|
|
|
|
if (strncmp(string, "-units", len) == 0) {
|
|
+ if (arg + 1 == objc) {
|
|
+ Tcl_AppendResult(interp, "No argument given for ",
|
|
+ string, " option", (char *) NULL);
|
|
+ return TCL_ERROR;
|
|
+ }
|
|
+
|
|
string = Tcl_GetStringFromObj(objv[arg+1], &len);
|
|
if (strncasecmp(string, "seconds", len) == 0) type = 1;
|
|
if (strncasecmp(string, "samples", len) == 0) type = 0;
|
|
@@ -1152,6 +1158,12 @@
|
|
return TCL_ERROR;
|
|
}
|
|
|
|
+ if (arg + 1 == objc) {
|
|
+ Tcl_AppendResult(interp, "No argument given for ",
|
|
+ subOptionStrings[index], " option", (char *) NULL);
|
|
+ return TCL_ERROR;
|
|
+ }
|
|
+
|
|
switch ((enum subOptions) index) {
|
|
case RATE:
|
|
case FREQUENCY:
|
|
--- a/generic/shape.c
|
|
+++ b/generic/shape.c
|
|
@@ -103,6 +103,12 @@
|
|
"option", 0, &index) != TCL_OK) {
|
|
return TCL_ERROR;
|
|
}
|
|
+ if (arg + 1 == objc) {
|
|
+ Tcl_AppendResult(interp, "No argument given for ",
|
|
+ subOptionStrings[index], " option", (char *) NULL);
|
|
+ return TCL_ERROR;
|
|
+ }
|
|
+
|
|
switch ((enum subOptions) index) {
|
|
case START:
|
|
{
|
|
@@ -155,6 +161,12 @@
|
|
"option", 0, &index) != TCL_OK) {
|
|
return TCL_ERROR;
|
|
}
|
|
+ if (arg + 1 == objc) {
|
|
+ Tcl_AppendResult(interp, "No argument given for ",
|
|
+ subOptionStrings[index], " option", (char *) NULL);
|
|
+ return TCL_ERROR;
|
|
+ }
|
|
+
|
|
switch ((enum subOptions) index) {
|
|
case START:
|
|
{
|
|
@@ -384,6 +396,12 @@
|
|
"option", 0, &index) != TCL_OK) {
|
|
return TCL_ERROR;
|
|
}
|
|
+ if (arg + 1 == objc) {
|
|
+ Tcl_AppendResult(interp, "No argument given for ",
|
|
+ subOptionStrings[index], " option", (char *) NULL);
|
|
+ return TCL_ERROR;
|
|
+ }
|
|
+
|
|
switch ((enum subOptions) index) {
|
|
case START:
|
|
{
|
|
--- /dev/null
|
|
+++ b/tests/zargs.test
|
|
@@ -0,0 +1,54 @@
|
|
+# Tests cover lack of command arguments
|
|
+
|
|
+package require -exact snack 2.2
|
|
+
|
|
+if {[lsearch [namespace children] ::tcltest] == -1} {
|
|
+ package require tcltest
|
|
+ namespace import ::tcltest::*
|
|
+}
|
|
+
|
|
+test zargs-1.1 {pitch command, with missing argument for -start option} {
|
|
+ set s [snack::sound snd -load ex1.wav]
|
|
+ catch {$s pitch -start} msg
|
|
+ $s destroy
|
|
+ set msg
|
|
+} {No argument given for -start option}
|
|
+
|
|
+test zargs-1.2 {length command, with missing argument for -units option} {
|
|
+ set s [snack::sound snd -load ex1.wav]
|
|
+ catch {$s length 10 10 -units} msg
|
|
+ $s destroy
|
|
+ set msg
|
|
+} {No argument given for -units option}
|
|
+
|
|
+test zargs-1.3 {convert command, with missing argument for -rate option} {
|
|
+ set s [snack::sound snd -load ex1.wav]
|
|
+ catch {$s convert -rate 1 -rate} msg
|
|
+ $s destroy
|
|
+ set msg
|
|
+} {No argument given for -rate option}
|
|
+
|
|
+test zargs-1.4 {iir filter, with missing argument for -denominator option} {
|
|
+ set s [snack::sound snd -load ex1.wav]
|
|
+ catch {snack::filter iir -denominator} msg
|
|
+ $s destroy
|
|
+ set msg
|
|
+} {No argument given for -denominator option}
|
|
+
|
|
+test zargs-1.5 {shape command, with missing argument for -start option} {
|
|
+ set s [snack::sound snd -load ex1.wav]
|
|
+ catch {$s shape -start 0 -start} msg
|
|
+ $s destroy
|
|
+ set msg
|
|
+} {No argument given for -start option}
|
|
+
|
|
+test zargs-1.6 {datasamples command, with missing argument for -start option} {
|
|
+ set s [snack::sound snd -load ex1.wav]
|
|
+ catch {$s datasamples -start 0 -start} msg
|
|
+ $s destroy
|
|
+ set msg
|
|
+} {No argument given for -start option}
|
|
+
|
|
+# cleanup
|
|
+::tcltest::cleanupTests
|
|
+return
|