Fossil SCM

Found the same misuse of memcmp() in the "stash" subcommand matcher.

wyoung 2023-12-12 22:15 trunk
Commit 2a8551762dba4854df16a1e17c76fb6a1ff4fd89be324a76fc89e94236eb7f09
1 file changed +13 -13
+13 -13
--- src/stash.c
+++ src/stash.c
@@ -569,11 +569,11 @@
569569
zCmd = "save";
570570
}else{
571571
zCmd = g.argv[2];
572572
}
573573
nCmd = strlen(zCmd);
574
- if( memcmp(zCmd, "save", nCmd)==0 ){
574
+ if( strncmp(zCmd, "save", nCmd)==0 ){
575575
if( unsaved_changes(0)==0 ){
576576
fossil_fatal("nothing to stash");
577577
}
578578
stashid = stash_create();
579579
undo_disable();
@@ -600,14 +600,14 @@
600600
g.argv[1] = "revert";
601601
revert_cmd();
602602
fossil_print("stash %d saved\n", stashid);
603603
return;
604604
}else
605
- if( memcmp(zCmd, "snapshot", nCmd)==0 ){
605
+ if( strncmp(zCmd, "snapshot", nCmd)==0 ){
606606
stash_create();
607607
}else
608
- if( memcmp(zCmd, "list", nCmd)==0 || memcmp(zCmd, "ls", nCmd)==0 ){
608
+ if( strncmp(zCmd, "list", nCmd)==0 || strncmp(zCmd, "ls", nCmd)==0 ){
609609
Stmt q, q2;
610610
int n = 0, width;
611611
int verboseFlag = find_option("verbose","v",0)!=0;
612612
const char *zWidth = find_option("width","W",1);
613613
@@ -667,11 +667,11 @@
667667
}
668668
db_finalize(&q);
669669
if( verboseFlag ) db_finalize(&q2);
670670
if( n==0 ) fossil_print("empty stash\n");
671671
}else
672
- if( memcmp(zCmd, "drop", nCmd)==0 || memcmp(zCmd, "rm", nCmd)==0 ){
672
+ if( strncmp(zCmd, "drop", nCmd)==0 || strncmp(zCmd, "rm", nCmd)==0 ){
673673
int allFlag = find_option("all", "a", 0)!=0;
674674
if( allFlag ){
675675
Blob ans;
676676
char cReply;
677677
prompt_user("This action is not undoable. Continue (y/N)? ", &ans);
@@ -693,11 +693,11 @@
693693
undo_save_stash(0);
694694
stash_drop(stashid);
695695
undo_finish();
696696
}
697697
}else
698
- if( memcmp(zCmd, "pop", nCmd)==0 || memcmp(zCmd, "apply", nCmd)==0 ){
698
+ if( strncmp(zCmd, "pop", nCmd)==0 || strncmp(zCmd, "apply", nCmd)==0 ){
699699
char *zCom = 0, *zDate = 0, *zHash = 0;
700700
int popped = *zCmd=='p';
701701
if( popped ){
702702
if( g.argc>3 ) usage("pop");
703703
stashid = stash_get_id(0);
@@ -722,11 +722,11 @@
722722
fossil_free(zDate);
723723
fossil_free(zHash);
724724
undo_finish();
725725
if( popped ) stash_drop(stashid);
726726
}else
727
- if( memcmp(zCmd, "goto", nCmd)==0 ){
727
+ if( strncmp(zCmd, "goto", nCmd)==0 ){
728728
int nConflict;
729729
int vid;
730730
if( g.argc>4 ) usage("apply STASHID");
731731
stashid = stash_get_id(g.argc==4 ? g.argv[3] : 0);
732732
undo_begin();
@@ -737,16 +737,16 @@
737737
db_multi_exec("UPDATE vfile SET mtime=0 WHERE pathname IN "
738738
"(SELECT origname FROM stashfile WHERE stashid=%d)",
739739
stashid);
740740
undo_finish();
741741
}else
742
- if( memcmp(zCmd, "diff", nCmd)==0
743
- || memcmp(zCmd, "gdiff", nCmd)==0
744
- || memcmp(zCmd, "show", nCmd)==0
745
- || memcmp(zCmd, "gshow", nCmd)==0
746
- || memcmp(zCmd, "cat", nCmd)==0
747
- || memcmp(zCmd, "gcat", nCmd)==0
742
+ if( strncmp(zCmd, "diff", nCmd)==0
743
+ || strncmp(zCmd, "gdiff", nCmd)==0
744
+ || strncmp(zCmd, "show", nCmd)==0
745
+ || strncmp(zCmd, "gshow", nCmd)==0
746
+ || strncmp(zCmd, "cat", nCmd)==0
747
+ || strncmp(zCmd, "gcat", nCmd)==0
748748
){
749749
int fBaseline = 0;
750750
DiffConfig DCfg;
751751
752752
if( strstr(zCmd,"show")!=0 || strstr(zCmd,"cat")!=0 ){
@@ -759,11 +759,11 @@
759759
}
760760
diff_options(&DCfg, zCmd[0]=='g', 0);
761761
stashid = stash_get_id(g.argc==4 ? g.argv[3] : 0);
762762
stash_diff(stashid, fBaseline, &DCfg);
763763
}else
764
- if( memcmp(zCmd, "help", nCmd)==0 ){
764
+ if( strncmp(zCmd, "help", nCmd)==0 ){
765765
g.argv[1] = "help";
766766
g.argv[2] = "stash";
767767
g.argc = 3;
768768
help_cmd();
769769
}else
770770
--- src/stash.c
+++ src/stash.c
@@ -569,11 +569,11 @@
569 zCmd = "save";
570 }else{
571 zCmd = g.argv[2];
572 }
573 nCmd = strlen(zCmd);
574 if( memcmp(zCmd, "save", nCmd)==0 ){
575 if( unsaved_changes(0)==0 ){
576 fossil_fatal("nothing to stash");
577 }
578 stashid = stash_create();
579 undo_disable();
@@ -600,14 +600,14 @@
600 g.argv[1] = "revert";
601 revert_cmd();
602 fossil_print("stash %d saved\n", stashid);
603 return;
604 }else
605 if( memcmp(zCmd, "snapshot", nCmd)==0 ){
606 stash_create();
607 }else
608 if( memcmp(zCmd, "list", nCmd)==0 || memcmp(zCmd, "ls", nCmd)==0 ){
609 Stmt q, q2;
610 int n = 0, width;
611 int verboseFlag = find_option("verbose","v",0)!=0;
612 const char *zWidth = find_option("width","W",1);
613
@@ -667,11 +667,11 @@
667 }
668 db_finalize(&q);
669 if( verboseFlag ) db_finalize(&q2);
670 if( n==0 ) fossil_print("empty stash\n");
671 }else
672 if( memcmp(zCmd, "drop", nCmd)==0 || memcmp(zCmd, "rm", nCmd)==0 ){
673 int allFlag = find_option("all", "a", 0)!=0;
674 if( allFlag ){
675 Blob ans;
676 char cReply;
677 prompt_user("This action is not undoable. Continue (y/N)? ", &ans);
@@ -693,11 +693,11 @@
693 undo_save_stash(0);
694 stash_drop(stashid);
695 undo_finish();
696 }
697 }else
698 if( memcmp(zCmd, "pop", nCmd)==0 || memcmp(zCmd, "apply", nCmd)==0 ){
699 char *zCom = 0, *zDate = 0, *zHash = 0;
700 int popped = *zCmd=='p';
701 if( popped ){
702 if( g.argc>3 ) usage("pop");
703 stashid = stash_get_id(0);
@@ -722,11 +722,11 @@
722 fossil_free(zDate);
723 fossil_free(zHash);
724 undo_finish();
725 if( popped ) stash_drop(stashid);
726 }else
727 if( memcmp(zCmd, "goto", nCmd)==0 ){
728 int nConflict;
729 int vid;
730 if( g.argc>4 ) usage("apply STASHID");
731 stashid = stash_get_id(g.argc==4 ? g.argv[3] : 0);
732 undo_begin();
@@ -737,16 +737,16 @@
737 db_multi_exec("UPDATE vfile SET mtime=0 WHERE pathname IN "
738 "(SELECT origname FROM stashfile WHERE stashid=%d)",
739 stashid);
740 undo_finish();
741 }else
742 if( memcmp(zCmd, "diff", nCmd)==0
743 || memcmp(zCmd, "gdiff", nCmd)==0
744 || memcmp(zCmd, "show", nCmd)==0
745 || memcmp(zCmd, "gshow", nCmd)==0
746 || memcmp(zCmd, "cat", nCmd)==0
747 || memcmp(zCmd, "gcat", nCmd)==0
748 ){
749 int fBaseline = 0;
750 DiffConfig DCfg;
751
752 if( strstr(zCmd,"show")!=0 || strstr(zCmd,"cat")!=0 ){
@@ -759,11 +759,11 @@
759 }
760 diff_options(&DCfg, zCmd[0]=='g', 0);
761 stashid = stash_get_id(g.argc==4 ? g.argv[3] : 0);
762 stash_diff(stashid, fBaseline, &DCfg);
763 }else
764 if( memcmp(zCmd, "help", nCmd)==0 ){
765 g.argv[1] = "help";
766 g.argv[2] = "stash";
767 g.argc = 3;
768 help_cmd();
769 }else
770
--- src/stash.c
+++ src/stash.c
@@ -569,11 +569,11 @@
569 zCmd = "save";
570 }else{
571 zCmd = g.argv[2];
572 }
573 nCmd = strlen(zCmd);
574 if( strncmp(zCmd, "save", nCmd)==0 ){
575 if( unsaved_changes(0)==0 ){
576 fossil_fatal("nothing to stash");
577 }
578 stashid = stash_create();
579 undo_disable();
@@ -600,14 +600,14 @@
600 g.argv[1] = "revert";
601 revert_cmd();
602 fossil_print("stash %d saved\n", stashid);
603 return;
604 }else
605 if( strncmp(zCmd, "snapshot", nCmd)==0 ){
606 stash_create();
607 }else
608 if( strncmp(zCmd, "list", nCmd)==0 || strncmp(zCmd, "ls", nCmd)==0 ){
609 Stmt q, q2;
610 int n = 0, width;
611 int verboseFlag = find_option("verbose","v",0)!=0;
612 const char *zWidth = find_option("width","W",1);
613
@@ -667,11 +667,11 @@
667 }
668 db_finalize(&q);
669 if( verboseFlag ) db_finalize(&q2);
670 if( n==0 ) fossil_print("empty stash\n");
671 }else
672 if( strncmp(zCmd, "drop", nCmd)==0 || strncmp(zCmd, "rm", nCmd)==0 ){
673 int allFlag = find_option("all", "a", 0)!=0;
674 if( allFlag ){
675 Blob ans;
676 char cReply;
677 prompt_user("This action is not undoable. Continue (y/N)? ", &ans);
@@ -693,11 +693,11 @@
693 undo_save_stash(0);
694 stash_drop(stashid);
695 undo_finish();
696 }
697 }else
698 if( strncmp(zCmd, "pop", nCmd)==0 || strncmp(zCmd, "apply", nCmd)==0 ){
699 char *zCom = 0, *zDate = 0, *zHash = 0;
700 int popped = *zCmd=='p';
701 if( popped ){
702 if( g.argc>3 ) usage("pop");
703 stashid = stash_get_id(0);
@@ -722,11 +722,11 @@
722 fossil_free(zDate);
723 fossil_free(zHash);
724 undo_finish();
725 if( popped ) stash_drop(stashid);
726 }else
727 if( strncmp(zCmd, "goto", nCmd)==0 ){
728 int nConflict;
729 int vid;
730 if( g.argc>4 ) usage("apply STASHID");
731 stashid = stash_get_id(g.argc==4 ? g.argv[3] : 0);
732 undo_begin();
@@ -737,16 +737,16 @@
737 db_multi_exec("UPDATE vfile SET mtime=0 WHERE pathname IN "
738 "(SELECT origname FROM stashfile WHERE stashid=%d)",
739 stashid);
740 undo_finish();
741 }else
742 if( strncmp(zCmd, "diff", nCmd)==0
743 || strncmp(zCmd, "gdiff", nCmd)==0
744 || strncmp(zCmd, "show", nCmd)==0
745 || strncmp(zCmd, "gshow", nCmd)==0
746 || strncmp(zCmd, "cat", nCmd)==0
747 || strncmp(zCmd, "gcat", nCmd)==0
748 ){
749 int fBaseline = 0;
750 DiffConfig DCfg;
751
752 if( strstr(zCmd,"show")!=0 || strstr(zCmd,"cat")!=0 ){
@@ -759,11 +759,11 @@
759 }
760 diff_options(&DCfg, zCmd[0]=='g', 0);
761 stashid = stash_get_id(g.argc==4 ? g.argv[3] : 0);
762 stash_diff(stashid, fBaseline, &DCfg);
763 }else
764 if( strncmp(zCmd, "help", nCmd)==0 ){
765 g.argv[1] = "help";
766 g.argv[2] = "stash";
767 g.argc = 3;
768 help_cmd();
769 }else
770

Keyboard Shortcuts

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