~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to _groupcompress_pyx.pyx

  • Committer: John Arbash Meinel
  • Date: 2009-03-02 22:38:28 UTC
  • mto: (0.17.31 trunk)
  • mto: This revision was merged to the branch mainline in revision 4280.
  • Revision ID: john@arbash-meinel.com-20090302223828-hyb4crn4w28sgvmc
Fix a bug when handling multiple large-range copies.

We were adjusting moff multiple times, without adjusting it back.

Show diffs side-by-side

added added

removed removed

Lines of Context:
249
249
    # handling, and to avoid double allocating memory
250
250
    if (delta_size < DELTA_SIZE_MIN):
251
251
        # XXX: Invalid delta block
252
 
        return None
 
252
        raise RuntimeError('delta_size %d smaller than min delta size %d'
 
253
                           % (delta_size, DELTA_SIZE_MIN))
253
254
 
254
255
    data = <unsigned char *>delta
255
256
    top = data + delta_size
259
260
    size = get_delta_hdr_size(&data, top)
260
261
    if (size > source_size):
261
262
        # XXX: mismatched source size
262
 
        return None
 
263
        raise RuntimeError('source size %d < expected source size %d'
 
264
                           % (source_size, size))
263
265
    source_size = size
264
266
 
265
267
    # now the result size
302
304
            if (cp_off + cp_size < cp_size or
303
305
                cp_off + cp_size > source_size or
304
306
                cp_size > size):
305
 
                break
 
307
                raise RuntimeError('Something wrong with:'
 
308
                    ' cp_off = %s, cp_size = %s'
 
309
                    ' source_size = %s, size = %s'
 
310
                    % (cp_off, cp_size, source_size, size))
306
311
            memcpy(out, source + cp_off, cp_size)
307
312
            out = out + cp_size
308
313
            size = size - cp_size
309
314
        elif (cmd):
310
315
            if (cmd > size):
311
 
                break
 
316
                raise RuntimeError('Insert instruction longer than remaining'
 
317
                    ' bytes: %d > %d' % (cmd, size))
312
318
            memcpy(out, data, cmd)
313
319
            out = out + cmd
314
320
            data = data + cmd
320
326
            #  * encountering them (might be data corruption).
321
327
            #  */
322
328
            ## /* XXX: error("unexpected delta opcode 0"); */
323
 
            return None
 
329
            raise RuntimeError('Got delta opcode: 0, not supported')
324
330
 
325
331
    # /* sanity check */
326
332
    if (data != top or size != 0):
327
333
        ## /* XXX: error("delta replay has gone wild"); */
 
334
        raise RuntimeError('Did not extract the number of bytes we expected'
 
335
            ' we were left with %d bytes in "size", and top - data = %d'
 
336
            % (size, <int>(top - data)))
328
337
        return None
329
338
 
330
339
    # *dst_size = out - dst_buf;