Fossil SCM

Reduce divergence in the delta algorithm.

drh 2026-07-06 16:13 UTC trunk
Commit 901894f520a066ac80189c36eb7c0e64da9d9e7374409178dec706007d758708
1 file changed +2 -2
+2 -2
--- src/delta.c
+++ src/delta.c
@@ -602,11 +602,11 @@
602602
if( lenDelta<=0 ) return -1;
603603
switch( zDelta[0] ){
604604
case '@': {
605605
zDelta++; lenDelta--;
606606
ofst = getInt(&zDelta, &lenDelta);
607
- if( lenDelta<=0 || zDelta[0]!=',' ){
607
+ if( lenDelta>0 && zDelta[0]!=',' ){
608608
/* ERROR: copy command not terminated by ',' */
609609
return -1;
610610
}
611611
zDelta++; lenDelta--;
612612
DEBUG1( printf("COPY %d from %d\n", cnt, ofst); )
@@ -629,11 +629,11 @@
629629
if( total>limit ){
630630
/* ERROR: insert command gives an output larger than predicted */
631631
return -1;
632632
}
633633
DEBUG1( printf("INSERT %d\n", cnt); )
634
- if( (i64)cnt>(i64)lenDelta ){
634
+ if( cnt>lenDelta ){
635635
/* ERROR: insert count exceeds size of delta */
636636
return -1;
637637
}
638638
memcpy(zOut, zDelta, cnt);
639639
zOut += cnt;
640640
--- src/delta.c
+++ src/delta.c
@@ -602,11 +602,11 @@
602 if( lenDelta<=0 ) return -1;
603 switch( zDelta[0] ){
604 case '@': {
605 zDelta++; lenDelta--;
606 ofst = getInt(&zDelta, &lenDelta);
607 if( lenDelta<=0 || zDelta[0]!=',' ){
608 /* ERROR: copy command not terminated by ',' */
609 return -1;
610 }
611 zDelta++; lenDelta--;
612 DEBUG1( printf("COPY %d from %d\n", cnt, ofst); )
@@ -629,11 +629,11 @@
629 if( total>limit ){
630 /* ERROR: insert command gives an output larger than predicted */
631 return -1;
632 }
633 DEBUG1( printf("INSERT %d\n", cnt); )
634 if( (i64)cnt>(i64)lenDelta ){
635 /* ERROR: insert count exceeds size of delta */
636 return -1;
637 }
638 memcpy(zOut, zDelta, cnt);
639 zOut += cnt;
640
--- src/delta.c
+++ src/delta.c
@@ -602,11 +602,11 @@
602 if( lenDelta<=0 ) return -1;
603 switch( zDelta[0] ){
604 case '@': {
605 zDelta++; lenDelta--;
606 ofst = getInt(&zDelta, &lenDelta);
607 if( lenDelta>0 && zDelta[0]!=',' ){
608 /* ERROR: copy command not terminated by ',' */
609 return -1;
610 }
611 zDelta++; lenDelta--;
612 DEBUG1( printf("COPY %d from %d\n", cnt, ofst); )
@@ -629,11 +629,11 @@
629 if( total>limit ){
630 /* ERROR: insert command gives an output larger than predicted */
631 return -1;
632 }
633 DEBUG1( printf("INSERT %d\n", cnt); )
634 if( cnt>lenDelta ){
635 /* ERROR: insert count exceeds size of delta */
636 return -1;
637 }
638 memcpy(zOut, zDelta, cnt);
639 zOut += cnt;
640

Keyboard Shortcuts

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