Commit 3434f6d4 authored by Roman Lacko's avatar Roman Lacko
Browse files

fixed infinite loop for empty response in GitLab::API::Iterator

parent 0da27679
Loading
Loading
Loading
Loading
+13 −13
Original line number Original line Diff line number Diff line
@@ -148,28 +148,28 @@ sub next_block {
        return 0;
        return 0;
    }
    }


    if (!defined $self->{pages_total}) {
    croak "Response for " . $self->name . " did not contain an array"
        $self->{pages_total} = $response->header("X-Total-Pages");
        unless ref $data eq "ARRAY";
    }


    # if there was no X-Total-Pages, the response is not paginated, blame the user
    # get total number of pages from the header
    if (!defined $self->{pages_total}) {
    if (!defined $self->{pages_total}) {
        # some requests are not paginated if additional parameters are provided
        # some requests are not paginated if additional parameters are provided
        # carp "Iterating over non-paginated request for " . $self->name;
        # use 1 if there are data, 0 otherwise
        $self->{pages_total} = 1;
        my $default = @$data ? 1 : 0;
        $self->{pages_total} = $response->header("X-Total-Pages") // $default;
        $self->idebug("total pages $self->{pages_total}");
    }
    }


    croak "Response for " . $self->name . " did not contain an array"
        unless ref $data eq "ARRAY";

    push @{$self->{data}},      @$data;
    push @{$self->{data}},      @$data;
    push @{$self->{responses}}, $response;
    push @{$self->{responses}}, $response;


    $self->api->{last}  = $response;
    $self->api->{last}  = $response;
    $self->{count}     += scalar @$data;
    $self->{count}     += scalar @$data;
    ++$self->{pages_read};


    $self->{finished} = $self->{pages_read} == $self->{pages_total};
    # only increase read pages if there are pages to read
    ++$self->{pages_read} if $self->{pages_total};

    $self->{finished} = !$self->{pages_total} || $self->{pages_read} == $self->{pages_total};
    $self->idebug("block read successful");
    $self->idebug("block read successful");
    $self->idebug("all blocks were read") if $self->{finished};
    $self->idebug("all blocks were read") if $self->{finished};
    return 1;
    return 1;