mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 01:02:58 +00:00
Protect against relation loops (fixes #2072)
This commit is contained in:
@@ -20,12 +20,15 @@ _.extend(iD.Relation.prototype, {
|
||||
type: 'relation',
|
||||
members: [],
|
||||
|
||||
extent: function(resolver) {
|
||||
extent: function(resolver, memo) {
|
||||
return resolver.transient(this, 'extent', function() {
|
||||
if (memo && memo[this.id]) return iD.geo.Extent();
|
||||
memo = memo || {};
|
||||
memo[this.id] = true;
|
||||
return this.members.reduce(function(extent, member) {
|
||||
member = resolver.hasEntity(member.id);
|
||||
if (member) {
|
||||
return extent.extend(member.extent(resolver));
|
||||
return extent.extend(member.extent(resolver, memo));
|
||||
} else {
|
||||
return extent;
|
||||
}
|
||||
|
||||
@@ -44,6 +44,12 @@ describe('iD.Relation', function () {
|
||||
|
||||
expect(r.extent(graph)).to.eql([[0, 0], [0, 0]])
|
||||
});
|
||||
|
||||
it("does not error on self-referencing relations", function () {
|
||||
var r = iD.Relation();
|
||||
r = r.addMember({id: r.id});
|
||||
expect(r.extent(iD.Graph([r]))).to.eql(iD.geo.Extent())
|
||||
});
|
||||
});
|
||||
|
||||
describe("#geometry", function () {
|
||||
|
||||
Reference in New Issue
Block a user