Fossil SCM
Reduce divergence in the delta algorithm.
Commit
901894f520a066ac80189c36eb7c0e64da9d9e7374409178dec706007d758708
Parent
09ec3734a500949…
1 file changed
+2
-2
+2
-2
| --- src/delta.c | ||
| +++ src/delta.c | ||
| @@ -602,11 +602,11 @@ | ||
| 602 | 602 | if( lenDelta<=0 ) return -1; |
| 603 | 603 | switch( zDelta[0] ){ |
| 604 | 604 | case '@': { |
| 605 | 605 | zDelta++; lenDelta--; |
| 606 | 606 | ofst = getInt(&zDelta, &lenDelta); |
| 607 | - if( lenDelta<=0 || zDelta[0]!=',' ){ | |
| 607 | + if( lenDelta>0 && zDelta[0]!=',' ){ | |
| 608 | 608 | /* ERROR: copy command not terminated by ',' */ |
| 609 | 609 | return -1; |
| 610 | 610 | } |
| 611 | 611 | zDelta++; lenDelta--; |
| 612 | 612 | DEBUG1( printf("COPY %d from %d\n", cnt, ofst); ) |
| @@ -629,11 +629,11 @@ | ||
| 629 | 629 | if( total>limit ){ |
| 630 | 630 | /* ERROR: insert command gives an output larger than predicted */ |
| 631 | 631 | return -1; |
| 632 | 632 | } |
| 633 | 633 | DEBUG1( printf("INSERT %d\n", cnt); ) |
| 634 | - if( (i64)cnt>(i64)lenDelta ){ | |
| 634 | + if( cnt>lenDelta ){ | |
| 635 | 635 | /* ERROR: insert count exceeds size of delta */ |
| 636 | 636 | return -1; |
| 637 | 637 | } |
| 638 | 638 | memcpy(zOut, zDelta, cnt); |
| 639 | 639 | zOut += cnt; |
| 640 | 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( (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 |