Fossil SCM

Fixed an array-bounds access violation in Th_SubCommand. Problem reported via the mailing list.

stephan 2013-05-08 16:57 trunk
Commit 05ec4ed3c426a0d8ade85fbeda7937f026501426
1 file changed +12 -7
+12 -7
--- src/th_lang.c
+++ src/th_lang.c
@@ -887,19 +887,24 @@
887887
int argc,
888888
const char **argv,
889889
int *argl,
890890
Th_SubCommand *aSub
891891
){
892
- int i;
893
- for(i=0; aSub[i].zName; i++){
894
- char *zName = (char *)aSub[i].zName;
895
- if( th_strlen(zName)==argl[1] && 0==memcmp(zName, argv[1], argl[1]) ){
896
- return aSub[i].xProc(interp, ctx, argc, argv, argl);
892
+ if( argc>1 ){
893
+ int i;
894
+ for(i=0; aSub[i].zName; i++){
895
+ char *zName = (char *)aSub[i].zName;
896
+ if( th_strlen(zName)==argl[1] && 0==memcmp(zName, argv[1], argl[1]) ){
897
+ return aSub[i].xProc(interp, ctx, argc, argv, argl);
898
+ }
897899
}
898900
}
899
-
900
- Th_ErrorMessage(interp, "Expected sub-command, got:", argv[1], argl[1]);
901
+ if(argc<2){
902
+ Th_ErrorMessage(interp, "Expected sub-command", 0, 0);
903
+ }else{
904
+ Th_ErrorMessage(interp, "Expected sub-command, got:", argv[1], argl[1]);
905
+ }
901906
return TH_ERROR;
902907
}
903908
904909
/*
905910
** TH Syntax:
906911
--- src/th_lang.c
+++ src/th_lang.c
@@ -887,19 +887,24 @@
887 int argc,
888 const char **argv,
889 int *argl,
890 Th_SubCommand *aSub
891 ){
892 int i;
893 for(i=0; aSub[i].zName; i++){
894 char *zName = (char *)aSub[i].zName;
895 if( th_strlen(zName)==argl[1] && 0==memcmp(zName, argv[1], argl[1]) ){
896 return aSub[i].xProc(interp, ctx, argc, argv, argl);
 
 
897 }
898 }
899
900 Th_ErrorMessage(interp, "Expected sub-command, got:", argv[1], argl[1]);
 
 
 
901 return TH_ERROR;
902 }
903
904 /*
905 ** TH Syntax:
906
--- src/th_lang.c
+++ src/th_lang.c
@@ -887,19 +887,24 @@
887 int argc,
888 const char **argv,
889 int *argl,
890 Th_SubCommand *aSub
891 ){
892 if( argc>1 ){
893 int i;
894 for(i=0; aSub[i].zName; i++){
895 char *zName = (char *)aSub[i].zName;
896 if( th_strlen(zName)==argl[1] && 0==memcmp(zName, argv[1], argl[1]) ){
897 return aSub[i].xProc(interp, ctx, argc, argv, argl);
898 }
899 }
900 }
901 if(argc<2){
902 Th_ErrorMessage(interp, "Expected sub-command", 0, 0);
903 }else{
904 Th_ErrorMessage(interp, "Expected sub-command, got:", argv[1], argl[1]);
905 }
906 return TH_ERROR;
907 }
908
909 /*
910 ** TH Syntax:
911

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button