Fossil SCM

Fix a possible buffer overrun in the delta_apply() routine if handed an invalid delta.

drh 2010-12-23 18:00 trunk
Commit 174d61b90a7e4fe366f5914b80facb220d1cee7a
1 file changed +1 -1
+1 -1
--- src/delta.c
+++ src/delta.c
@@ -536,11 +536,11 @@
536536
cnt = getInt(&zDelta, &lenDelta);
537537
switch( zDelta[0] ){
538538
case '@': {
539539
zDelta++; lenDelta--;
540540
ofst = getInt(&zDelta, &lenDelta);
541
- if( zDelta[0]!=',' ){
541
+ if( lenDelta>0 && zDelta[0]!=',' ){
542542
/* ERROR: copy command not terminated by ',' */
543543
return -1;
544544
}
545545
zDelta++; lenDelta--;
546546
DEBUG1( printf("COPY %d from %d\n", cnt, ofst); )
547547
--- src/delta.c
+++ src/delta.c
@@ -536,11 +536,11 @@
536 cnt = getInt(&zDelta, &lenDelta);
537 switch( zDelta[0] ){
538 case '@': {
539 zDelta++; lenDelta--;
540 ofst = getInt(&zDelta, &lenDelta);
541 if( zDelta[0]!=',' ){
542 /* ERROR: copy command not terminated by ',' */
543 return -1;
544 }
545 zDelta++; lenDelta--;
546 DEBUG1( printf("COPY %d from %d\n", cnt, ofst); )
547
--- src/delta.c
+++ src/delta.c
@@ -536,11 +536,11 @@
536 cnt = getInt(&zDelta, &lenDelta);
537 switch( zDelta[0] ){
538 case '@': {
539 zDelta++; lenDelta--;
540 ofst = getInt(&zDelta, &lenDelta);
541 if( lenDelta>0 && zDelta[0]!=',' ){
542 /* ERROR: copy command not terminated by ',' */
543 return -1;
544 }
545 zDelta++; lenDelta--;
546 DEBUG1( printf("COPY %d from %d\n", cnt, ofst); )
547

Keyboard Shortcuts

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