Merge branch 'fix'
* fix: fix pack-object buffer size mailinfo: decode underscore used in "Q" encoding properly. Reintroduce svn pools to solve the memory leak. pack-objects: do not stop at object that is "too small"
This commit is contained in:
commit
3c144afe50
@ -136,8 +136,10 @@ sub file {
|
||||
|
||||
print "... $rev $path ...\n" if $opt_v;
|
||||
my (undef, $properties);
|
||||
my $pool = SVN::Pool->new();
|
||||
eval { (undef, $properties)
|
||||
= $self->{'svn'}->get_file($path,$rev,$fh); };
|
||||
= $self->{'svn'}->get_file($path,$rev,$fh,$pool); };
|
||||
$pool->clear;
|
||||
if($@) {
|
||||
return undef if $@ =~ /Attempted to get checksum/;
|
||||
die $@;
|
||||
|
12
mailinfo.c
12
mailinfo.c
@ -405,7 +405,7 @@ static unsigned hexval(int c)
|
||||
return ~0;
|
||||
}
|
||||
|
||||
static int decode_q_segment(char *in, char *ot, char *ep)
|
||||
static int decode_q_segment(char *in, char *ot, char *ep, int rfc2047)
|
||||
{
|
||||
int c;
|
||||
while ((c = *in++) != 0 && (in <= ep)) {
|
||||
@ -414,9 +414,11 @@ static int decode_q_segment(char *in, char *ot, char *ep)
|
||||
if (d == '\n' || !d)
|
||||
break; /* drop trailing newline */
|
||||
*ot++ = ((hexval(d) << 4) | hexval(*in++));
|
||||
continue;
|
||||
}
|
||||
else
|
||||
*ot++ = c;
|
||||
if (rfc2047 && c == '_') /* rfc2047 4.2 (2) */
|
||||
c = 0x20;
|
||||
*ot++ = c;
|
||||
}
|
||||
*ot = 0;
|
||||
return 0;
|
||||
@ -547,7 +549,7 @@ static void decode_header_bq(char *it)
|
||||
sz = decode_b_segment(cp + 3, piecebuf, ep);
|
||||
break;
|
||||
case 'q':
|
||||
sz = decode_q_segment(cp + 3, piecebuf, ep);
|
||||
sz = decode_q_segment(cp + 3, piecebuf, ep, 1);
|
||||
break;
|
||||
}
|
||||
if (sz < 0)
|
||||
@ -569,7 +571,7 @@ static void decode_transfer_encoding(char *line)
|
||||
switch (transfer_encoding) {
|
||||
case TE_QP:
|
||||
ep = line + strlen(line);
|
||||
decode_q_segment(line, line, ep);
|
||||
decode_q_segment(line, line, ep, 0);
|
||||
break;
|
||||
case TE_BASE64:
|
||||
ep = line + strlen(line);
|
||||
|
@ -1052,7 +1052,7 @@ static int try_delta(struct unpacked *cur, struct unpacked *old, unsigned max_de
|
||||
if (cur_entry->delta)
|
||||
max_size = cur_entry->delta_size-1;
|
||||
if (sizediff >= max_size)
|
||||
return -1;
|
||||
return 0;
|
||||
delta_buf = diff_delta(old->data, oldsize,
|
||||
cur->data, size, &delta_size, max_size);
|
||||
if (!delta_buf)
|
||||
@ -1231,7 +1231,7 @@ static void setup_progress_signal(void)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
SHA_CTX ctx;
|
||||
char line[PATH_MAX + 20];
|
||||
char line[40 + 1 + PATH_MAX + 2];
|
||||
int window = 10, depth = 10, pack_to_stdout = 0;
|
||||
struct object_entry **list;
|
||||
int num_preferred_base = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user