Fossil SCM
win32 fossil commit stops if many files added or edited.
Fixed
41bb23e65002895…
· opened 17 years, 5 months ago
- Type
- Code_Defect
- Priority
- Immediate
- Severity
- Minor
- Resolution
- Open
- Subsystem
- —
- Created
- Oct. 24, 2008 6:42 a.m.
'blob_add_cr()' has buffer overrun if it requires to call 'blob_resize()'
(declared in "blob.c") 'blob_add_cr()' increase 'Blob#nUsed' if Blob includes '\n'. and 'blob_resize()' update it, too. then it makes buffer overrun.
here is my replacement
void blob_add_cr(Blob *p){
char *z = p->aData;
int j = p->nUsed;
int i, n;
for(i=n=0; i<j; i++){
if( z[i]=='\n' ) n++;
}
j += n;
if( j>=p->nAlloc ){
blob_resize(p, j);
z = p->aData;
}
p->nUsed = j;
z[j] = 0;
while( j>i ){
if( (z[--j] = z[--i]) =='\n' ){
z[--j] = '\r';
}
}
}