Browse Source

Merge branch 'master' into next

* master:
  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"
maint
Junio C Hamano 19 years ago
parent
commit
d1e36c796d
  1. 4
      git-svnimport.perl
  2. 12
      mailinfo.c
  3. 4
      pack-objects.c

4
git-svnimport.perl

@ -136,8 +136,10 @@ sub file {


print "... $rev $path ...\n" if $opt_v; print "... $rev $path ...\n" if $opt_v;
my (undef, $properties); my (undef, $properties);
my $pool = SVN::Pool->new();
eval { (undef, $properties) eval { (undef, $properties)
= $self->{'svn'}->get_file($path,$rev,$fh); }; = $self->{'svn'}->get_file($path,$rev,$fh,$pool); };
$pool->clear;
if($@) { if($@) {
return undef if $@ =~ /Attempted to get checksum/; return undef if $@ =~ /Attempted to get checksum/;
die $@; die $@;

12
mailinfo.c

@ -405,7 +405,7 @@ static unsigned hexval(int c)
return ~0; 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; int c;
while ((c = *in++) != 0 && (in <= ep)) { 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) if (d == '\n' || !d)
break; /* drop trailing newline */ break; /* drop trailing newline */
*ot++ = ((hexval(d) << 4) | hexval(*in++)); *ot++ = ((hexval(d) << 4) | hexval(*in++));
continue;
} }
else if (rfc2047 && c == '_') /* rfc2047 4.2 (2) */
*ot++ = c; c = 0x20;
*ot++ = c;
} }
*ot = 0; *ot = 0;
return 0; return 0;
@ -547,7 +549,7 @@ static void decode_header_bq(char *it)
sz = decode_b_segment(cp + 3, piecebuf, ep); sz = decode_b_segment(cp + 3, piecebuf, ep);
break; break;
case 'q': case 'q':
sz = decode_q_segment(cp + 3, piecebuf, ep); sz = decode_q_segment(cp + 3, piecebuf, ep, 1);
break; break;
} }
if (sz < 0) if (sz < 0)
@ -569,7 +571,7 @@ static void decode_transfer_encoding(char *line)
switch (transfer_encoding) { switch (transfer_encoding) {
case TE_QP: case TE_QP:
ep = line + strlen(line); ep = line + strlen(line);
decode_q_segment(line, line, ep); decode_q_segment(line, line, ep, 0);
break; break;
case TE_BASE64: case TE_BASE64:
ep = line + strlen(line); ep = line + strlen(line);

4
pack-objects.c

@ -1052,7 +1052,7 @@ static int try_delta(struct unpacked *cur, struct unpacked *old, unsigned max_de
if (cur_entry->delta) if (cur_entry->delta)
max_size = cur_entry->delta_size-1; max_size = cur_entry->delta_size-1;
if (sizediff >= max_size) if (sizediff >= max_size)
return -1; return 0;
delta_buf = diff_delta(old->data, oldsize, delta_buf = diff_delta(old->data, oldsize,
cur->data, size, &delta_size, max_size); cur->data, size, &delta_size, max_size);
if (!delta_buf) if (!delta_buf)
@ -1231,7 +1231,7 @@ static void setup_progress_signal(void)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
SHA_CTX ctx; SHA_CTX ctx;
char line[PATH_MAX + 20]; char line[40 + 1 + PATH_MAX + 2];
int window = 10, depth = 10, pack_to_stdout = 0; int window = 10, depth = 10, pack_to_stdout = 0;
struct object_entry **list; struct object_entry **list;
int num_preferred_base = 0; int num_preferred_base = 0;

Loading…
Cancel
Save